从Node和Browser运行时需要Javascript模块

我正在使用Nodejs编写一些示例程序,这些程序也应该从浏览器中调用。 我正面临着一个问题,就是在Nodejs中调用JavaScript文件,同样也会与浏览器的JS语义兼容(所以require ,Node是特定的,不会做这个工作)。

假设我有三个.js文件:“A.js”,“B.js”和“C.js”。 “A.js”写在Node中。 “B.js”和“C.js”是用纯JavaScript编写的(也就是说,它们应该可以从浏览器中调用)。

我需要从“A.js”调用“B.js”中存在的函数b()。 所以我eval()“B.js”导出方法b()。 这工作正常。 当“B.js”中的函数b()调用“C.js”中的函数c()时,会发生此问题。

 B.js: function b() { console.log('In function b'); c(); } C.js: function c() { console.log('In function c'); } 

我如何确保依赖性得到解决? 任何帮助,将不胜感激。 谢谢!!!

在node.js中,有require函数,允许你需要一个文件并使用导出的内容。

C.js:

 function c() { console.log('In function c'); } // This is the exported object module.exports = { c: c }; 

B.js:

 function b() { var c = require('./c.js'); // "c" is now the exported object console.log('In function b'); cc(); } module.exports = { b: b }; 

A.js:

 var b = require('./b.js'); bb(); // "In function b" "In function c" 

你一定要阅读如何处理node.js模块: http :

您可以手动加载普通的香草JavaScript文件并对其进行eval 。 在你的情况下,你可以创build一个加载纯JavaScript文件的节点模块。 喜欢这个:

bc.js

 var fs = require('fs'); // load and eval b.js and c.js eval(fs.readFileSync('./b.js','utf8') + fs.readFileSync('./c.js','utf8')); // put function b and c in exports module.exports = { b : b, c : c }; 

所以,只要你需要bc.js,你就可以得到bc函数,而b可以使用c函数。

有关更多详细信息,请参阅以下问题:将“Vanilla”JavaScript库加载到Node.js中