gpt4 book ai didi

javascript - 我如何根据我的 YML 构建文件在 Javascript 中要求不同的模块?

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

我目前正在开发一款网络游戏,该游戏也可以通过 electron 作为桌面应用程序使用。 .如果我正在构建游戏的网络版本,我不想require('electron')

我与 build 一起使用的 .yml 文件如下:

cmd: browserify {PROJECT_PATH}/js/main.js > {PROJECT_PATH}/js/bundle.js && {PROJECT_PATH}/index.html
name: 'web'
targets:
electron:
cmd: browserify {PROJECT_PATH}/js/main.js > {PROJECT_PATH}/js/bundle.js && electron {PROJECT_PATH}

如果我的构建命令类似于 node main.js true,我可以只引用 bool 参数,然后在 Javascript 中使用它来 require('electron') 或不。但是,鉴于我目前的情况,我不确定如何做到这一点。

换句话说,我想通过我的 .yml 构建文件传递一个 bool 参数,并像这样使用所述 bool 值:

if (passedBoolean) {
const {app, BrowserWindow} = require('electron');
}

我该怎么做?如果不可能,还有什么其他解决方案?

最佳答案

有几种方法可以解决这个问题。首先是查询平台的功能。例如,Electron 设置变量:

process.versions.electron

如果你在浏览器中运行,这将不会被设置,所以你可以检查它的存在(你会知道你在 Electron 中运行)。这是文档:Electron: Process .

测试嵌套属性可能有点粗暴,所以一个稍微简单的方法是将您尝试访问该值的尝试 package 在 try/catch 中:

try {
process.versions.electron;
} catch (err) {
console.log('Not electron', err);
}

您甚至可以将它 package 成一个不错的函数:

function isPlatformElectron() {
'use strict';
try {
process.versions.electron;
return true;
} catch (err) {
return false;
}
}

if (isPlatformElectron()) {
// Do Electron-specific stuff here
}

您也可以使用原始代码(稍作修改)执行类似的操作:

let app, BrowserWindow;
try {
({app, BrowserWindow} = require('electron'));
} catch (err) {
console.log('Not electron');
}

if (app && BrowserWindow) {
console.log('is electron');
}

我发现这个版本更难阅读并且更喜欢我在上面建议的函数方法,但我认为像您的原始版本一样使用解构来展示示例可能会有用(尽管在这种情况下您不能使用 const)。

关于javascript - 我如何根据我的 YML 构建文件在 Javascript 中要求不同的模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39836267/

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