include('./path/to/file')在node.js中执行简单类型的命令是否容易/可行?
我要做的就是访问局部变量并运行脚本。人们通常如何组织比简单的hello世界更大的node.js项目?(功能齐全的动态网站)
例如,我想拥有类似的目录:
/models
/views
...等等
downloadedModules在与脚本相同的目录中创建一个文件夹时,以上脚本才能正常工作。
include('./path/to/file')在node.js中执行简单类型的命令是否容易/可行?
我要做的就是访问局部变量并运行脚本。人们通常如何组织比简单的hello世界更大的node.js项目?(功能齐全的动态网站)
例如,我想拥有类似的目录:
/models
/views
...等等
downloadedModules在与脚本相同的目录中创建一个文件夹时,以上脚本才能正常工作。
Answers:
只是做一个 require('./yourfile.js');
将您希望外部访问的所有变量声明为全局变量。所以代替
var a = "hello" 这将是
GLOBAL.a="hello" 要不就
a = "hello"
这显然是不好的。您不想污染全局范围。相反,建议方法是针对export您的函数/变量。
如果您想要MVC模式,请查看Geddy。
require如果您未在路径中添加类似以下内容的前缀,这将有助于我了解npm模块中的外观./
您需要了解CommonJS,这是定义模块的一种模式。您不应该滥用GLOBAL范围,这总是一件坏事,而可以使用'exports'令牌,如下所示:
// circle.js
var PI = 3.14; // PI will not be accessible from outside this module
exports.area = function (r) {
return PI * r * r;
};
exports.circumference = function (r) {
return 2 * PI * r;
};
以及将使用我们的模块的客户端代码:
// client.js
var circle = require('./circle');
console.log( 'The area of a circle of radius 4 is '
+ circle.area(4));
此代码是从node.js文档API中提取的:
http://nodejs.org/docs/v0.3.2/api/modules.html
另外,如果您想使用Rails或Sinatra之类的东西,我建议您使用Express(我无法发布该URL,这对Stack Overflow很可惜!)
如果您正在为Node编写代码,那么使用Ivan所述的Node模块无疑是正确的选择。
但是,如果您需要加载已经编写的并且不知道节点的JavaScript,那么使用该vm模块是可行的(并且绝对更可取eval)。
例如,这是我的execfile模块,该模块path在context或全局上下文中评估脚本:
var vm = require("vm");
var fs = require("fs");
module.exports = function(path, context) {
var data = fs.readFileSync(path);
vm.runInNewContext(data, context, path);
}
另请注意:加载了的模块require(…)无权访问全局上下文。
require.cache,因此单个文件可能会多次加载。
require像正常:function loadService(name) { return require('./services/' + name); }然后列出但是服务是有道理的应用。
如果您打算加载外部javascript文件的函数或对象,请使用以下代码在此上下文上加载–请注意runInThisContext方法:
var vm = require("vm");
var fs = require("fs");
var data = fs.readFileSync('./externalfile.js');
const script = new vm.Script(data);
script.runInThisContext();
// here you can use externalfile's functions or objects as if they were instantiated here. They have been added to this context.
扩展@Shripad和@Ivan的答案,我建议您使用Node.js的标准module.export功能。
在常量文件(例如 constants.js)中,您可以这样编写常量:
const CONST1 = 1;
module.exports.CONST1 = CONST1;
const CONST2 = 2;
module.exports.CONST2 = CONST2;
然后在要使用这些常量的文件中,编写以下代码:
const {CONST1 , CONST2} = require('./constants.js');
如果您以前从未看过const { ... }语法:那是在破坏分配。
抱歉复活。您可以使用child_process模块在node.js中执行外部js文件
var child_process = require('child_process');
//EXECUTE yourExternalJsFile.js
child_process.exec('node yourExternalJsFile.js', (error, stdout, stderr) => {
console.log(`${stdout}`);
console.log(`${stderr}`);
if (error !== null) {
console.log(`exec error: ${error}`);
}
});