设置一个Javascript函数为其他.js文件中的所有代码

我有一个doSomething.js文件,其中包含需要从命令行运行的代码(例如: node doSomething.js )以及来自基于nodejs的队列工作器

queueWorker.js

 var worker = client.worker(['example']); worker.register({ doSomething: function (params, callback) { // run the code contained in doSomething.js } }); worker.start(); 

doSomething.js

 console.log('Hello world') 

问题:是否有办法让主代码保留在doSomething.js并在queueWorker.js包含对doSomething.jsqueueWorker.js ? 我不想在2个不同的文件中有2个相同的代码副本。

所以,如果我正确地理解了你,你已经在一个项目中有一些你想被命令行节点脚本和工作人员使用的代码。 你没有提到你如何部署这个代码,所以我将假定运行worker的东西和命令行是一样的代码库。

在这种情况下,我会假设一个解决scheme是让你的doSomething.js使用标准的NodeJS模块系统 ,

doSomething.js

 module.exports = function() { console.log('Hello, world'); } 

queueWorker.js

你的工人会变成这样的:

 var worker = client.worker(['example']); var doSomething = require('path/to/doSomething'); worker.register({ doSomething: function (params, callback) { doSomething(); } }); worker.start(); 

doSomethingCli.js

你的命令行脚本将是一个完全独立的脚本(假设没关系),看起来类似于worker:

 var doSomething = require('path/to/doSomething'); doSomething(); 

虽然你说你想从命令行调用doSomething.js ,但这不是一个很好的解决scheme – 你会发现自己开始把cli的东西放到doSomething.js中,这会破坏你的队列工作者。 保持共同的代码分开。

我假设你正在使用节点的两种情况。

queueWorker.js

 var doSomething = require('./doSomething'); var worker = client.worker(['example']); worker.register({ doSomething: function (params, callback) { doSomething(params, callback); } }); worker.start(); 

doSomething.js

 module.exports = functionv(params, callback) { console.log('Hello world'); } 

Javascript是一种dynamic语言,并且总是可以eval包含代码的string。 例如,你可以做到这一点

 // file1.js ------------------------- function foo() { console.log("Hello, world."); } // file2.js ------------------------- eval(require('fs').readFileSync("file1.js", "utf-8")); foo(); 

当然,如果代码确实是静态的,并且你只是想在不同的项目之间共享它(模块的概念),那么node.js包含了一个更好的方法。