假设我有一个叫app。js的文件。很简单:
var express = require('express');
var app = express.createServer();
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('index', {locals: {
title: 'NowJS + Express Example'
}});
});
app.listen(8080);
如果我在“tools.js”中有一个函数。我如何将它们导入到apps.js中使用?
还是……我应该把“工具”变成一个模块,然后需要它吗?<<似乎很难,我宁愿做tools.js文件的基本导入。
我只是想补充一点,如果你只需要从你的tools.js中导入某些函数,那么你可以使用解构赋值,这在node.js版本6.4中得到了支持-参见node.green。
例子:
(两个文件在同一个文件夹中)
tools.js
module.exports = {
sum: function(a,b) {
return a + b;
},
isEven: function(a) {
return a % 2 == 0;
}
};
main.js
const { isEven } = require('./tools.js');
console.log(isEven(10));
输出:真正的
这也避免了你将这些函数赋值为另一个对象的属性,就像下面(常见)赋值的情况一样:
Const tools = require('./tools.js');
你需要调用tools.isEven(10)。
注意:
不要忘记在文件名前面加上正确的路径——即使两个文件在同一个文件夹中,也需要加上。/前缀
来自Node.js文档:
没有前导'/','。/',或'../'表示一个文件,模块
必须是核心模块或从node_modules文件夹加载。
在我看来,另一种方法是在调用require()函数时执行lib文件中的所有内容,使用(function(/* things here */){})();这样做将使所有这些函数都具有全局作用域,就像eval()解决方案一样
src / lib.js
(function () {
funcOne = function() {
console.log('mlt funcOne here');
}
funcThree = function(firstName) {
console.log(firstName, 'calls funcThree here');
}
name = "Mulatinho";
myobject = {
title: 'Node.JS is cool',
funcFour: function() {
return console.log('internal funcFour() called here');
}
}
})();
然后在你的主代码中,你可以像这样调用函数的名字:
main.js
require('./src/lib')
funcOne();
funcThree('Alex');
console.log(name);
console.log(myobject);
console.log(myobject.funcFour());
会得到这样的输出
bash-3.2$ node -v
v7.2.1
bash-3.2$ node main.js
mlt funcOne here
Alex calls funcThree here
Mulatinho
{ title: 'Node.JS is cool', funcFour: [Function: funcFour] }
internal funcFour() called here
undefined
当你调用我的object.funcFour()时,请注意未定义,如果你加载eval(),它将是相同的。希望能有所帮助。