首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用通过环境变量提供的选项运行gulp在Windows上不工作

使用通过环境变量提供的选项运行gulp在Windows上不工作
EN

Stack Overflow用户
提问于 2018-04-07 23:27:13
回答 1查看 199关注 0票数 0

我一直在macOS上编程,所以我的package.json如下所示:

代码语言:javascript
复制
[...]
"scripts": {
    "build": "NODE_TARGET=electron NODE_CONFIGURATION=development gulp",
    "watch": "NODE_TARGET=electron NODE_CONFIGURATION=development gulp watch",
    "build:web": "NODE_TARGET=web NODE_CONFIGURATION=development gulp",
    "watch:web": "NODE_TARGET=web NODE_CONFIGURATION=development gulp watch",
    "release": "NODE_TARGET=electron NODE_CONFIGURATION=production gulp",
    "release:web": "NODE_TARGET=web NODE_CONFIGURATION=production gulp",
    "clean": "gulp clean",
    "start": "electron ."
}
[...]

起初,我试图以gulp --web的形式通过命令行参数提供这些参数,但没有找到任何正确解析这些参数的库。因此,我在调用之前使用环境变量,并访问gulpfile.babel.js中的环境变量,如下所示:

代码语言:javascript
复制
const targetPlatform = {
    isElectron: process.env.NODE_TARGET === "electron",
    isWeb: process.env.NODE_TARGET === "web"
};

不幸的是,我没有考虑到Windows实际上不能处理npm脚本提供的命令/变量。我想知道如何使这些调用在Windows和macOS之间可移植。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-08 13:36:53

我的一个朋友建议使用cross-env,这基本上解决了我的问题。

在使用该包之前,我使用以下代码解析了process.argv数组:

代码语言:javascript
复制
const commandLineArguments = (argumentList => {
    let parsedArguments = {}, index, option, thisOption, currentOption;
    for (index = 0; index < argumentList.length; index++) {
        thisOption = argumentList[index].trim();
        option = thisOption.replace(/^\-+/, '');
        if (option === thisOption) {
            if (currentOption) {
                parsedArguments[currentOption] = option;
            }
            currentOption = null;
        } else {
            currentOption = option;
            parsedArguments[currentOption] = true;
        }
    }
    return parsedArguments;
})(process.argv);

使用像gulp --target electron --configuration development这样的调用,我可以访问这样的参数:

代码语言:javascript
复制
const targetPlatform = {
    isElectron: commandLineArguments.target === "electron",
    isWeb: commandLineArguments.target === "web"
};
// Default setting if no option was supplied
if (!targetPlatform.isElectron && !targetPlatform.isWeb) {
    targetPlatform.isElectron = true;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49712963

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档