目的:从如下的普通旧
JavaScript文件制作Node.js模块或Requirejs AMD模块:
var foo = function () {};
我无法控制,我无法编辑foo.js.
Whyfoo是第一个内部是一个普通的空对象吗?如何在模块中“包含”普通的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的节点模块必须使用模块想要公开的所有内容填充导出对象.在您的情况下,当您需要文件时,没有任何内容添加到导出,因此它显示为空.所以简短的回答是你需要以某种方式修改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');