gpt4 book ai didi

javascript - `if __name__ == ' __main__ '` 相当于 javascript es6 模块

转载 作者:数据小太阳 更新时间:2023-10-29 05:29:14 25 4
gpt4 key购买 nike

是否可以检查 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 的控制台消息但不是 other.js。

我找到了 answer to this question with regards to node ,但我特别对 es6 导入感兴趣

最佳答案

ES6 模块的替代方案是 now supported在节点中。使用新的 import.meta 内置函数。 (不要忘记在 package.json 中设置 "type": "module"。)

例子

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

if (process.argv[1] === fileURLToPath(import.meta.url)) {
console.log("I print to stdout!");
}
// lib.js
import { fileURLToPath } from "url";

if (process.argv[1] === fileURLToPath(import.meta.url)) {
console.log("I don't run, because I'm an imported module.");
}

$ node main.js 输出:

I print to stdout!

效用函数

我喜欢从“./lib/utils.js”导入 {isMain} 并将 import.meta.url 传递给 isMain().

import { argv } from "process"
import { fileURLToPath } from "url"
/**
* Check if a module is the main module launched with the node process.
* Meaning the module is NOT imported by another module,
* but was directly invoked by `node`, like this: `$ node main.js`
*
* @example
* ```js
* // main.js
* import lib from "./lib.js"
* import { isMain } from "./utils.js"
*
* if (isMain(import.meta.url)) {
* console.log("I print to stdout")
* }
*
* // lib.js
* import { isMain } from "./utils"
*
* if (isMain(import.meta.url)) {
* console.log("I don't run, because I'm an imported module")
* }
* ```
*
* @param {string} moduleUrl needs to be `import.meta.url`
* @returns {boolean} true if the module is the main module
*/
export function isMain(moduleUrl) {
const modulePath = fileURLToPath(moduleUrl)
const [_binPath, mainScriptPath] = argv
return modulePath === mainScriptPath
}

关于javascript - `if __name__ == ' __main__ '` 相当于 javascript es6 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34842738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com