我可以显示 npm 运行的扩展命令吗?

Can I show the expanded commands that npm runs?

我正在尝试使用 npm 作为构建工具,受到 Keith Cirkel 的文章 How to Use npm as a Build Tool 的启发。有点管用,但是...

$ npm run build

> browserify $npm_package_config_src -d -p [minifyify --map myproj-$npm_package_version.map.json --output dist/myproj-$npm_package_version.map.json] > dist/myproj-$npm_package_version.min.js

我来自 Make world,我真的很希望看到 actual 命令更进一步,这意味着 $npm_package_config_src$npm_package_version 扩展,就像这样:

$ npm run build

> browserify src/myfile.js -d -p [minifyify --map myproj-0.4.2.map.json --output dist/myproj-0.4.2.map.json] > dist/myproj-0.4.2.min.js

有没有办法做到这一点?

推理:当看到实际命令时,它使调试构建更加清晰。现在我觉得自己被蒙在鼓里(尽管正确的事情可能会发生)。此外,由于 $npm_package_config_blahblah 是这样的 "mouthful"(正如 Keith 所说的那样),它本身就变成了一个冗长的问题。

问题是 npm 在 npm 脚本方面并没有真正的智能;它只是获取原始字符串并将它们传递给操作系统 shell(大多数操作系统为 bash,windows 为 cmd)。 Npm 不知道什么是变量、globbing 或任何 shell 特性。

因此您只能依赖 bash 功能和/或 windows cmd 功能。幸运的是两者都有这个选项:

在 bash 上,您可以 set -xset -o verbose 像这样:

{
    "scripts": {
        " foo": "set -x; echo $bar"
    }
}

在 windows 中,您可以选择 @echo on:

{
    "scripts": {
        " foo": "@echo on; echo $bar"
    }
}

不过,我不确定您如何将它们结合起来以兼容两种环境。