node.js - 如何在 Node.js 中包含一个不是模块的文件(使其成为一个模块)?

标签 node.js

目的:从像这样的普通旧 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/

相关文章:

javascript - 中间件未执行。 Nodejs

node.js - 如何获取对模块中先前 fork 进程的引用?

MySQL - 数据太长?

python - 使用child_process将函数和参数从 Node 传递到python

javascript - 'PHP' 的运行时环境是什么以及在哪里,就像 'Node.js' 的 'Javascript' 运行时环境一样,用于构建服务器端 Web 应用程序?

node.js - NativeScript 类型错误 : Cannot read property 'version' of undefined

node.js - 在 NodeJS 中设置不记名 token

node.js - 捕获 imagemagick 错误 - Node 崩溃

node.js - 无法安装 "@angular/cli"

javascript - 在服务器端实现 Paper.js 螺旋光栅示例