我正在使用Babel在Express服务器上快速转换我的ES6文件。在我的server.js
文件(vanilla JS)中,我添加了require('babel-core/register')
和require('./app')
。
在app.js
(ES6)中,我执行所有正常的Express内容:
import express from 'express';
let app = express();
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
... etc
即使我没有在module.exports
文件中正式定义app.js
,但当我运行node server
时,app.js
会正确required
并运行。为什么这样做?
答案 0 :(得分:1)
当您需要一个模块时,该模块中的代码将被执行,但它只执行一次。对同一模块的后续require
调用将无效,除非返回模块导出的任何内容。 That's the nature of node modules(查找有关'缓存'的说明)。通过使用module.exports
,您基本上可以为其指定返回值。
在您的情况下,您无需导出任何内容,只要您需要app.js就会调用app.listen
行。虽然您可以导出API或类似的东西,但如果您想:
/*app.js*/
import express from 'express';
let app = express();
module.exports = {
start:function(){
app.listen(3000, () => {
console.log('Server listening on port 3000');
})
}
/*server.js*/
require('babel-core/register');
var app = require('./app');
app.start();
我可能会误解这个问题,但我认为巴贝尔和快递并不是真的相关。