javascript - 'module.exports' 在语法上是否必须位于包含导出的文件内?

标签 javascript node.js

module.exports 是否必须在语法上位于包含导出的文件内?

例如,如果我定义一个全局函数属性 myDefine 并尝试从其内部执行 module.exports 赋值,那么这会起作用。

如果没有,为什么不呢?

file1.js

GLOBAL.myDefine = function(fn) {
  module.exports = fn;
};

file2.js

require('./file1');
myDefine(function() {
  return function MyExport() {};
});

最佳答案

当 Node 需要文件时,它将内容包装在外部函数中:

function(exports, require, module, __filename, __dirname){

}

当 file1.js 被解释时,module.exports = fn 将引用它自己的本地 module 实例,因此它不会对 file2.js 产生影响。为了使其正常工作,您需要以某种方式将 file2.js module 实例传递给 file1 的 myDefine() 例如

文件1.js

GLOBAL.myDefine = function(module, fn) {
  module.exports = fn;
}

文件2.js

require('./file1');
myDefine(module, function() {
  return function MyExport() {};
});

关于javascript - 'module.exports' 在语法上是否必须位于包含导出的文件内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30767598/

相关文章:

javascript - 如何从 Node.js 服务器读取 json 响应?

node.js - Azure 移动应用程序迁移后出现故障

javascript - OOP - 访问对象以更改其变量?

node.js - Node.js 子进程中通过管道处理提取 tar 缓冲区

javascript - 一个 <Router/> 只能有一个子元素

javascript - 在 HTML/Javascript/CSS 中绘制虚拟(假)插入符号

node.js - Vagrantfile/Dockerfile 运行 Node 应用程序的简单示例

node.js - 如何返回子数组的聚合,并在最顶部数组上使用过滤器?

javascript - Sequelize : Changing model schema on production

javascript - 使用不同的 ng-controller 和 ng-include