在Node.js的CommonJS模块中不应该有任何状态
有时在CommonJS中会遇到以下写法。
const lib = require("./lib");
lib.data = "module-1";
function libの値をmodule1から取得() {
return lib.data;
}
exports.libの値をmodule1から取得 = libの値をmodule1から取得;
有时候我们可能会直接使用模块的属性来方便地进行设置。例如,像npm的日期格式化模块dateformat在国际化星期几时,指定了以下的写法。

然而,这种写法是不应该的。因为它会被其他的模块覆盖。
关注在运行index.js时,控制台上显示的值,在以下示例中。

在lib.js中的Lib.data属性,无论是在module-1.js还是module-2.js中,都使用相同的实例。在module-1.js中,Lib.data属性是module-1的,但在module-2.js中被覆盖了。尽管已经使用了模块,但这样做没有意义。
虽然像这次一样在明显需要的地方进行了声明是可以的,但安装模块从npm上,以及模块所依赖的其他模块的依赖等检查全部是不可能的。
如果是使用自己创建的模块,则不应该使用这样的写法;如果是现有的模块,则需要在使用之前重新赋值。