node.js相当于python的if __name__ =='__ main__'

nor*_*gon 261 node.js

我想检查我的模块是否被包含或直接运行.我怎么能在node.js中这样做?

Ste*_*lie 355

文档描述了另一种方法,这可能是首选的方法:

直接从Node运行文件时,require.main设置为其模块.

要利用此功能,请检查此模块是否为主模块,如果是,请调用主代码:

var fnName = function() {
    // main code
}

if (require.main === module) {
    fnName();
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您在浏览器中使用此代码,您将收到"参考错误",因为未定义"require".为防止这种情况,请使用:

if (typeof require !== 'undefined' && require.main === module) {
    fnName();
}
Run Code Online (Sandbox Code Playgroud)

  • 你总是要检查require.main === module**,不论你的函数名是什么**.为了清楚起见,上面的代码应修改为:`var fnName = function(){// code} if(require.main === module){fnName(); }` (17认同)
  • @OhadCohen"try ... catch"也可能会发现真正的错误.我认为最好只检查typeof require!='undefined'. (4认同)
  • 遗憾的是,这个特性在`--experimental-modules` 中消失了。 (3认同)
  • @seamlik在这种情况下,可以使用包[es-main](https://www.npmjs.com/package/es-main)。用法:当文件未导入时,`esMain(import.meta)` 返回 true。 (2认同)

nor*_*gon 60

if (!module.parent) {
  // this is the main module
} else {
  // we were require()d from somewhere else
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果您在浏览器中使用此代码,您将收到"参考错误",因为未定义"模块".为防止这种情况,请使用:

if (typeof module !== 'undefined' && !module.parent) {
  // this is the main module
} else {
  // we were require()d from somewhere else or from a browser
}
Run Code Online (Sandbox Code Playgroud)

  • 接受的答案也不使用模块的名称. (12认同)
  • 不,但它在[node.js的测试]之一中使用(https://github.com/joyent/node/blob/master/test/simple/test-cli-eval.js) (11认同)
  • 这已被弃用。现在使用 `module.main` (2认同)