javascript es6模块中的if if __name__ =='__main __'`

Pet*_*ton 7 javascript module ecmascript-6

是否可以检查JavaScript文件是否正在直接运行,或者是否需要将其作为es6模块导入的一部分。

例如,包含一个主脚本。

// main.js
import './other';

if (mainTest){
  console.log('This should run');
}
Run Code Online (Sandbox Code Playgroud)

导入依赖项。

// other.js
if (mainTest){
  console.log('This should never run');
}
Run Code Online (Sandbox Code Playgroud)

包括<script src=main.js></script>应该导致来自main.jsother.js 的控制台消息,但不会导致。

我找到了关于node的问题答案,但是我对es6导入特别感兴趣

Jun*_*aga 8

Node.js现在支持ES6 模块的替代方案。使用新的import.meta内置。

例子:

// main.mjs
import "./lib.mjs"
import { fileURLToPath } from "url";

if (process.argv[1] === fileURLToPath(import.meta.url)) {
  console.log(`main ran!`);
}
Run Code Online (Sandbox Code Playgroud)
// lib.mjs
import { fileURLToPath } from "url";

if (process.argv[1] === fileURLToPath(import.meta.url)) {
  console.log(`lib ran!`);
}
Run Code Online (Sandbox Code Playgroud)

和我们的输出:

main ran!
Run Code Online (Sandbox Code Playgroud)


jus*_*ris 7

module.parent 会帮助你:

if(module.parent) {
    console.log('required module')
} else {
    console.log('main')
}
Run Code Online (Sandbox Code Playgroud)

  • 注意: module.parent 现在[已弃用](https://nodejs.org/api/deprecations.html#DEP0144) (2认同)

nic*_*ael -1

我看到的解决方案只是在您导入的脚本中定义变量。mainTest即,您在 中定义main.js,然后使用现有的 if 块。