【发布时间】: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”。命令行是否变得太复杂?使用像grunt或gulp这样的任务运行器。保持通用性。 -
当你说“甚至 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 是完全不正确的。