`if __name__ ==' __ main __'`等同于javascript es6模块

时间:2016-01-17 19:36:00

标签: javascript module ecmascript-6

是否可以检查JavaScript文件是直接运行还是作为es6模块导入的一部分而需要。

例如包含一个主脚本。

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

if (mainTest){
  console.log('This should run');
}

导入依赖项。

// other.js
if (mainTest){
  console.log('This should never run');
}

包括<script src=main.js></script>应该会产生来自main.js的控制台消息,而不是其他.js。

我找到了answer to this question with regards to node,但我特别感兴趣的是es6进口

4 个答案:

答案 0 :(得分:3)

module.parent会帮助您:

if(module.parent) {
    console.log('required module')
} else {
    console.log('main')
}

答案 1 :(得分:1)

ES6模块的替代方法是在节点中使用now supported。使用新的内置import.meta

示例:

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

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

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

和我们的输出:

main ran!

答案 2 :(得分:0)

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

答案 3 :(得分:0)

module.parent 在 Node.js v14.6.0 中已弃用,但我们可以使用 require.main

function main() {
    console.log("You're running the main file!");
}

if (require.main === module) {
    main();
}

可以在here找到相关答案。