微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Node.js中包含一个不是模块的文件(制作模块)?

目的:从如下的普通旧 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');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐