目前我正在做这个:
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。然后,您只需请求该文件,甚至不保存返回值。
但说真的,你不应该这么做。保持适当的封装是一件好事。你已经有了正确的想法,所以继续做你正在做的事情。
其他回答
您可以使用global显式地将其导出到全局作用域。Foo = 5。然后,您只需请求该文件,甚至不保存返回值。
但说真的,你不应该这么做。保持适当的封装是一件好事。你已经有了正确的想法,所以继续做你正在做的事情。
我建议使用webpack(假设你正在使用webpack)。
定义常量就像设置webpack配置文件一样简单:
var webpack = require('webpack');
module.exports = {
plugins: [
new webpack.DefinePlugin({
'APP_ENV': '"dev"',
'process.env': {
'NODE_ENV': '"development"'
}
})
],
};
通过这种方式,您可以在源代码之外定义它们,并且它们将在您的所有文件中可用。
因为Node.js使用的是CommonJS模式,所以你只能在模块与模块之间共享变量。导出或者像在浏览器中那样设置全局变量,但你用的不是window而是global。Your_var = value;
作为一种替代方法,您可以将“常量”值分组在一个局部对象中,并导出一个返回该对象的浅克隆的函数。
var constants = { FOO: "foo" }
module.exports = function() {
return Object.assign({}, constants)
}
然后,如果有人重新分配FOO就无关紧要了,因为它只会影响他们的本地副本。
从之前的项目经验来看,这是一个很好的方法:
在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);