【问题标题】:Running bash scripts with npm使用 npm 运行 bash 脚本
【发布时间】:2016-04-28 12:33:20
【问题描述】:

我想尝试使用 npm 为 Web 应用程序运行各种构建任务。我知道我可以通过将scripts 字段添加到我的package.json 来做到这一点,如下所示:

"scripts": {
   "build": "some build command"
},

当您有更复杂的命令和一堆选项时,这会变得笨拙。是否可以将这些命令移动到 bash 脚本或类似的东西?比如:

"scripts": {
   "build": "build.sh"
},

npm run build 将在哪里执行build.sh 文件中的命令?

阅读this 的帖子似乎是这样,但我不清楚应该将build.sh 文件放在哪里,或者我是否遗漏了什么。

【问题讨论】:

  • 不要这样做。节点到处运行。巴什没有。无论您在 bash 中做什么,都可以在节点中 执行,甚至 CLI 调用也可以使用包依赖项来完成。需要rm?安装 rimraf,然后在 npm script 中使用它。 mkdir -p?安装 mkdirp 然后在 npm 脚本中使用它。你有一个独立于平台的通用脚本语言,就在那里,不要再假装它只是“Nix”。命令行是否变得太复杂?使用像gruntgulp 这样的任务运行器。保持通用性。
  • 当你说“甚至 CLI 调用也可以使用包依赖项来完成”时,你是在说像 this 这样的东西吗?
  • 上面的 cmets 说不,有一个很好的理由,可移植性。但这取决于你的听众。如果它是一个内部项目,如果您的开发人员使用 UNIX 之类的变体(Linux/Mac 等),那完全没问题。如果您正在创建一个通用库,它可能不是......使用 BASH/SH 有明显的好处,您将能够在一行中完成一些需要 Grunt/Gulp 页面的事情,但是,您'可能排除了 Windows 用户,这可能是也可能不是问题。
  • 为什么 rimraf 比 rm -rf 对于 Web 应用程序更好? rimraf 必须一次处理一个文件,并且只需要更多不需要的包。如果 Web 服务器没有 bash,那么您可以使用 del,但如果用户正在使用 node 而不是 .net 或其他东西进行开发,它可能有 bash。即使它是.net,它仍然可能有某种形式的 gitbash 或其他东西。
  • @Mike'Pomax'Kamermans 每个 Node 应用程序必须是可移植的,因为 Node 是完全不正确的。

标签: node.js bash shell npm


【解决方案1】:

完全有可能……

"scripts": {
   "build": "./build.sh"
},

另外,请确保在 bash 文件的顶部放置一个井号 #!/usr/bin/env bash

还要确保你有执行文件的权限

chmod +x ./build.sh

最后,在 npm 中运行 build 的命令是

npm run build

【讨论】:

  • 你可以把它放在任何你想要的地方,只要确保你把相对路径放在 package.json 例如"build": ". ./path/to/my/awesome/build/file/build.sh"
  • windows 呢?
  • 在 Windows 上 gitbash:'.' is not recognized as an internal or external command, operable program or batch file. 请参阅 here 了解详细说明原因。此外,将 sh 文件设置为默认使用 gitbash 或任何其他可以运行 bash 脚本的环境将使其工作。
  • 在 windows bash 中,npm 脚本为我工作:"name": "bash ./name.sh"
【解决方案2】:

更简单:

我经常这样做是为了一次性,PoC 不涉及 VCS

包.json
{
    "scripts": {
        "ship": "rsync -avz deployable/* <some-server>:/var/www/some-site/sub-dir/"
    },
}
...

【讨论】:

    【解决方案3】:

    如果您不想为授予权限而烦恼,并且您执行脚本的环境具有例如 sh,您可以这样做

    "scripts": {
       "build": "sh ./build.sh"
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-28
      • 2013-11-01
      • 2018-12-13
      • 2018-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多