是否可以检查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进口
答案 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找到相关答案。