如何根据我的 YML 构建文件在 Javascript 中要求不同的模块?
How can I require different modules in Javascript based on my YML build file?
我目前正在开发一款网络游戏,该游戏也将通过 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
,我可以只引用布尔参数,然后在 Javascript 中使用它来决定是否 require('electron')
。但是,鉴于我目前的情况,我不确定如何做到这一点。
换句话说,我想通过我的 .yml 构建文件传递一个布尔参数,并像这样使用所述布尔值:
if (passedBoolean) {
const {app, BrowserWindow} = require('electron');
}
我该怎么做?如果不可能,还有什么其他解决方案?
您可以通过多种方式解决此问题。首先是查询平台的功能。例如Electron设置变量:
process.versions.electron
如果您在浏览器中 运行,则不会设置此项,因此您可以检查它是否存在(并且您会知道您在 Electron 中 运行)。这是文档:Electron: Process.
测试嵌套的 属性 可能有点粗暴,因此一种稍微简单的方法是将您对值的访问尝试包装在 try/catch:
中
try {
process.versions.electron;
} catch (err) {
console.log('Not electron', err);
}
您甚至可以将它包装成一个不错的函数:
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)。
我目前正在开发一款网络游戏,该游戏也将通过 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
,我可以只引用布尔参数,然后在 Javascript 中使用它来决定是否 require('electron')
。但是,鉴于我目前的情况,我不确定如何做到这一点。
换句话说,我想通过我的 .yml 构建文件传递一个布尔参数,并像这样使用所述布尔值:
if (passedBoolean) {
const {app, BrowserWindow} = require('electron');
}
我该怎么做?如果不可能,还有什么其他解决方案?
您可以通过多种方式解决此问题。首先是查询平台的功能。例如Electron设置变量:
process.versions.electron
如果您在浏览器中 运行,则不会设置此项,因此您可以检查它是否存在(并且您会知道您在 Electron 中 运行)。这是文档:Electron: Process.
测试嵌套的 属性 可能有点粗暴,因此一种稍微简单的方法是将您对值的访问尝试包装在 try/catch:
中try {
process.versions.electron;
} catch (err) {
console.log('Not electron', err);
}
您甚至可以将它包装成一个不错的函数:
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)。