目前我正在做这个:
foo.js
const FOO = 5;
module.exports = {
FOO: FOO
};
并在bar.js中使用它:
var foo = require('foo');
foo.FOO; // 5
还有更好的办法吗?在exports对象中声明常量会让人感到尴尬。
目前我正在做这个:
foo.js
const FOO = 5;
module.exports = {
FOO: FOO
};
并在bar.js中使用它:
var foo = require('foo');
foo.FOO; // 5
还有更好的办法吗?在exports对象中声明常量会让人感到尴尬。
当前回答
您可以使用global显式地将其导出到全局作用域。Foo = 5。然后,您只需请求该文件,甚至不保存返回值。
但说真的,你不应该这么做。保持适当的封装是一件好事。你已经有了正确的想法,所以继续做你正在做的事情。
其他回答
我认为const解决了大多数人寻找这个答案的问题。如果你真的需要一个不可变的常数,看看其他的答案。 为了保持所有内容的组织,我将所有常量保存在一个文件夹中,然后需要整个文件夹。
src / main.js文件
const constants = require("./consts_folder");
src consts_folder / index . js
const deal = require("./deal.js")
const note = require("./note.js")
module.exports = {
deal,
note
}
Ps.这里的交易和注意将在main.js的第一层
src / consts_folder笔记js。
exports.obj = {
type: "object",
description: "I'm a note object"
}
Ps. obj将是main.js的第二级
src / consts_folder成交js。
exports.str = "I'm a deal string"
Ps. str将是main.js的第二级
main.js文件的最终结果:
console.log (constants.deal); 输出:
{交易:{str: '我是一个交易字符串'},
console.log (constants.note); 输出:
备注:{obj: {type: 'object', description: 'I\'m a note object'}}
您可以使用global显式地将其导出到全局作用域。Foo = 5。然后,您只需请求该文件,甚至不保存返回值。
但说真的,你不应该这么做。保持适当的封装是一件好事。你已经有了正确的想法,所以继续做你正在做的事情。
ES6路。
在foo.js中导出
const FOO = 'bar';
module.exports = {
FOO
}
导入到bar.js中
const {FOO} = require('foo');
因为Node.js使用的是CommonJS模式,所以你只能在模块与模块之间共享变量。导出或者像在浏览器中那样设置全局变量,但你用的不是window而是global。Your_var = value;
从之前的项目经验来看,这是一个很好的方法:
在constants.js中:
// constants.js
'use strict';
let constants = {
key1: "value1",
key2: "value2",
key3: {
subkey1: "subvalue1",
subkey2: "subvalue2"
}
};
module.exports =
Object.freeze(constants); // freeze prevents changes by users
在main.js(或app.js等)中,使用如下:
// main.js
let constants = require('./constants');
console.log(constants.key1);
console.dir(constants.key3);