- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 package.json 中有以下脚本:
"scripts": {
"vumper": "node node_modules/vumper/index.js",
"format": "prettier --single-quote -width=80 --write package.json"
},
“vumper”包接受命令行参数(例如“dv”)。我希望能够做的是有一个命令可以连续运行这两个命令。
本质上,我希望能够运行:
npm run vumber dv
然后
npm run format
但是在一个命令中,类似
npm run my-build dv
它将运行上述两个命令,正确接受命令行参数“dv”并将其传递给第一个 npm run vumper。这可能吗?
最佳答案
本质上,你想要的是有一个像这样的 npm 脚本,其中 <arg-here>
通过 CLI 提供;
...
"scripts": {
"my-build": "npm run vumper <arg-here> && npm run format",
...
},
...
但是,不幸的是 npm 没有内置功能来实现此目的。
特殊的 npm 选项 --
,(有关此选项的更多信息,请参阅下面解决方案 1 的末尾),只能用于将参数传递给脚本的 END,但不能传递到中间。因此,如果您的两个命令的顺序相反,则 --
选项可以像这样使用:
...
"scripts": {
"my-build": "npm run format && npm run vumper --",
...
},
...
要克服没有内置功能将参数传递到脚本中间的限制,请考虑以下解决方案:
有关仅 Bash 的解决方案,请参阅“解决方案 1”部分。
如果需要跨平台支持,请遵循“解决方案 2”部分中描述的解决方案。
配置您的my-build
scripts
中的脚本package.json 的部分来调用 Bash shell function ,如下图:
package.json
...
"scripts": {
"my-build": "func() { npm run vumper \"$1\" && npm run format; }; func",
"vumper": "node node_modules/vumper/index.js",
"format": "prettier --single-quote -width=80 --write package.json"
},
...
说明:
名为 func
的 Bash 函数执行以下操作:
npm run vumper <arg>
。借此<arg>
将是通过 CLI 传递的 shell 参数。脚本中使用 $1
引用它(即第一个 positional parameter/参数)。format
的脚本通过命令npm run format
.这两个npm run
命令使用 &&
链接起来运算符,所以第二个 npm run format
仅当初始 npm run vumper <arg>
时命令才会运行命令成功完成(即返回 0
退出代码)。
正在运行 my-build
脚本:
调用my-build
通过 CLI,您需要运行:
npm run my-build -- dv
注意:
在本例中,尾随 dv
部分是将传递给您的 vumper
的参数脚本。
特殊选项--
必须在参数之前指定。 docs描述--
选项为:
... The special option
--
is used bygetopt
to delimit the end of the options. npm will pass all the arguments after the--
directly to your script: ... The arguments will only be passed to the script specified afternpm run
and not to any pre or post script.
对于跨平台解决方案(可以与 Bash、Windows 命令提示符/cmd.exe 和 PowerShell 等成功配合使用的解决方案),您需要使用 Nodejs 帮助程序脚本,如下所示。
run.js
让我们将 Nodejs 脚本命名为 run.js 并将其保存在项目根目录中,与 package.json 处于同一级别。
const execSync = require('child_process').execSync;
const arg = process.argv[2] || 'dv'; // Default value `dv` if no args provided via CLI.
execSync('npm run vumper ' + arg, {stdio:[0, 1, 2]});
execSync('npm run format', {stdio:[0, 1, 2]});
package.json
配置您的my-build
调用 run.js 的脚本如下:
...
"scripts": {
"my-build": "node run",
"vumper": "node node_modules/vumper/index.js",
"format": "prettier --single-quote -width=80 --write package.json"
},
...
正在运行 my-build
脚本:
根据解决方案 1,调用 my-build
通过 CLI,您需要运行:
npm run my-build -- dv
说明:
run.js 利用 process.argv
获取通过 CLI 传递的参数(例如 dv
)。如果运行时没有提供参数npm run my-build
默认值(即 dv
)被传递到 vumper
npm 脚本。
run.js 还利用 child_process.execSync(...)
shell-out/调用两个 npm run
命令。
关于npm - 将命令行参数传递给 package.json 中的 npm 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51388921/
我正在尝试使用 JAXB 从 XSD 生成 java 类。 XSD 是我公司的官方 xsd,因此我无法仅为我的项目修改它们。在该网站上进行了数百次尝试和搜索后,我决定直接提出问题。 我的 XSD 中有
我已经了解了以下链接中的详细信息,但仍然存在何时使用哪个文件的问题?https://docs.npmjs.com/files/package-lock.json 最佳答案 包.json 包含项目的相关
当我在 centos 上运行命令 rpmbuild -bb mypackage.spec 时,出现错误 error: Package already exists: %package debuginf
my.packages 是 src 目录中的自定义原型(prototype)包。 Plone 实例中的数千个项目与其类型一起添加。我想将包重命名为 my.package。通过简单地卸载 my.pack
根据 javadoc 规范,我在相关包的根目录中放置了一个名为 package-info.html 的文档文件。但是,当我在该文件夹上运行 Doxygen 时,不会拾取该文件中的文档。我如何告诉 Do
我已经定义了如下的包: (defpackage :thehilariouspackageofamirteymuri (:nicknames ampack amir teymuri) (:use
我正在思考这个问题: > .packages() > (.packages()) [1] "stats" "graphics" "grDevices" "utils" "datase
我在内存中有一个 System.IO.Packaging.Package(它是一个 WordprocessingDocument)并且想将它流式传输到浏览器以保存它。 Word 文档已被基于 MVC
即使这是我不常发现的东西,在成员之前注释/* package*/的原因是什么? /* package */ final void attach(Context context) { atta
我正在开发我的应用程序,但在添加包以便导入它时,我总是收到此错误。 error: type 'Package.Dependency' has no member 'Package' 这是我的 Pack
install.packages("data.table") trying URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.
放置手动创建的插件的最佳位置是什么: a) C:\Users\{UserName}\AppData\Roaming\Sublime Text 3\Packages 或 b) C:\Users\{Use
这是一个有趣的 Perl 行为。 (至少对我来说 :) ) 我有两个包 PACKAGE1 和 PACKAGE2,它们导出具有相同名称的函数 Method1()。 由于将有如此多的包将导出相同的功能,使
package-archives (("marmalade" . "http://marmalade-repo.org/packages/") ("gnu" . "http://elpa.gnu.or
任何人都可以让我知道 package-lock.json 文件的确切用途吗? 尽管许多人提到它用于查看版本化依赖树。 寻找简单易行的解释。 提前致谢。 最佳答案 npm install使用此文件来确保
Python documentation说 Consider this code: import sound.effects.echo import sound.effects.surround fr
我在 ubuntu 上运行 VPS: Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 C
我有这样一个结构 $ tree -h . ├── [1.0K] myproj │ ├── [ 0] index.py │ ├── [ 0] __init__.py │ └──
我正在尝试解压 System.IO.Packaging.Package我从网络服务器收到的。也就是说,我正在使用 System.IO.Packaging.Package.Open(Stream)方法并
关于 package.json 文件中的@types 依赖项,我有一个愚蠢的问题: 在下面的 URL 中解释了应该安装的类型作为运行时依赖 npm install --save @types/loda
我是一名优秀的程序员,十分优秀!