作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
目的:从像这样的普通旧 JavaScript 文件制作 Node.js 模块或 Requirejs AMD 模块:
var foo = function () {};
我无法控制,也无法编辑 foo.js
。
为什么 foo
在第一个 if
中是一个普通的空对象?如何在我的模块中“包含”纯 JavaScript 文件?文件 mymodule.js
:
(function(root) {
if(typeof exports === 'object') { // Node.js
var foo = require('./foo');
console.log(foo); // { }
} else if (typeof define === 'function' && define.amd) { // RequireJS AMD
define(['foo'], function () {
return foo;
});
}
}());
最佳答案
加载了require
的 Node 模块必须使用模块想要公开的所有内容填充exports
对象。在您的情况下,当您需要文件时,exports
中没有添加任何内容,因此它显示为空。所以简短的回答是你需要以某种方式修改 foo.js
的内容。如果您不能手动执行,则需要以编程方式执行。为什么你无法控制它?
最简单的方法是,如果 foo.js
包含在使其成为适当模块所需的代码中,则以编程方式包装内容。
// Add an 'exports' line to the end of the module before loading it.
var originalFoo = fs.readFileSync('./foo.js', 'utf8');
fs.writeFileSync('./foo-module.js', originalFoo + "\nexports.foo = foo;");
var foo = require('./foo-module.js');
关于node.js - 如何在 Node.js 中包含一个不是模块的文件(使其成为一个模块)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913407/
我是一名优秀的程序员,十分优秀!