目前我正在做这个:

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);