module.exports 是否必须在 require()-ing 文件时定义?
Does module.exports have to be defined when require()-ing a file?
我正在使用 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
即使我没有在我的 app.js
文件中正式定义 module.exports
,当我 运行 node server
、app.js
得到正确的 required
和 运行s。为什么这样做有效?
当你需要一个模块时,该模块内的代码将被执行,但它只执行一次。随后对同一模块的 require
调用将没有任何效果,除了 return 模块导出的任何内容。 That's the nature of node modules(查找 'caching' 上的注释)。通过使用 module.exports
,您基本上是在为其指定一个 return 值。
您不需要导出任何内容,app.listen
行会在您需要 app.js 时立即调用。尽管您可以导出 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();
我可能误解了这个问题,但我不认为 babel 和 express 真的相关。
我正在使用 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
即使我没有在我的 app.js
文件中正式定义 module.exports
,当我 运行 node server
、app.js
得到正确的 required
和 运行s。为什么这样做有效?
当你需要一个模块时,该模块内的代码将被执行,但它只执行一次。随后对同一模块的 require
调用将没有任何效果,除了 return 模块导出的任何内容。 That's the nature of node modules(查找 'caching' 上的注释)。通过使用 module.exports
,您基本上是在为其指定一个 return 值。
您不需要导出任何内容,app.listen
行会在您需要 app.js 时立即调用。尽管您可以导出 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();
我可能误解了这个问题,但我不认为 babel 和 express 真的相关。