【问题标题】:npm run script, can't access command line argsnpm 运行脚本,无法访问命令行参数
【发布时间】:2020-09-30 13:46:25
【问题描述】:

我是一个电子初学者,我正在尝试用它来打包一个基于反应的应用程序。我正在尝试通过 package.json 中的脚本条目运行电子:

"electron-dev": "concurrently \"cross-env BROWSER=none npm start\" \"wait-on http://localhost:3000 && electron . $npm_config_input \"",

这将运行 electron.js(这是 package.json 文件中前面定义的“main”),但我需要传入命令行参数。我已经看到表明 $npm_config_input 将以这种方式传递参数的引用:

% npm run electron-dev --input=file.tif

但是 $npm_config_input 对我来说似乎没有得到扩展。 electron.js 获取文字字符串 $npm_config_input。我很困惑为什么这不起作用。

看来我可以通过这样做来避免这个问题:

% npm run electron-dev -- --input=file.tif

但我不知道如何将输入参数与我同时开始使用的第二个命令相关联。如果我可以在其定义中使用 $1 或 $npm_config_input 之类的东西,那就太好了。有人对此有解决方案吗?

我正在使用 git bash 在 Windows 10 上运行它。其他的东西通常有效。我安装了 nodejs 12.16.2。蒂亚!

【问题讨论】:

    标签: npm electron npm-scripts


    【解决方案1】:

    您几乎是正确的,只需使用process.argv

    例如,创建一个名为 cmd.js 的文件,如下所示

    console.log(process.argv.slice(2));
    

    现在通过将以下内容添加到 package.json 来为其创建一个脚本挂钩

    "scripts": {
      "foo": "node cmd.js"
    }
    

    现在你可以试试...

    $ npm run foo -- arg1 arg2
    
    > foo@1.0.0 foo /tmp/foo
    > node cmd.js "arg1" "arg2"
    
    [ 'arg1', 'arg2' ]
    

    【讨论】:

    • 我知道我可以将 args 放在 npm 命令中的“--”之后,它们会自动传递给命令。但是,如果我在这种情况下这样做,我需要将它们传递给我同时运行的第二个命令。在我最初的示例中,这就是 $npm_config_input 所在的位置。不过,我看不出有什么办法。
    【解决方案2】:

    我相信我已经找到了答案。在 electron.js 中,我打印了 process.argv 以查看那里是否有任何用处。原来 process.env.npm_config_input 在我运行时包含 file.tif:

    % npm run electron-dev --input=file.tif
    

    这应该对我有用。我仍然不明白为什么我阅读并尝试过的其他内容不起作用。

    【讨论】:

      猜你喜欢
      • 2020-12-31
      • 2015-10-30
      • 2019-08-18
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-19
      • 2012-07-19
      相关资源
      最近更新 更多