如何解决是否可以从终端更新 package.json 属性? 解决方案:运行:
在我的 package.json 文件中我定义了一些属性(主要注意'ticket'):
{
"name": "app-name","version": "1.0.0","buildDate": "20200124","author": "John Doe <john@doe.net>","ticket": "JIRA-123","private": true,"scripts": {
"dev": "node build/dev-server.js","start": "node build/dev-server.js","build": "node build/build.js",},"dependencies": {
"axios": "^0.16.2","es6-promise": "^4.2.5","font-awesome": "^4.7.0",...
}
我的问题:是否可以从终端更新位于 package.json 中的属性?例如,在运行 npm build 命令之前,会出现提示,要求输入您正在处理的票号。
请输入票号:
用户输入 JIRA-12345。
包 json 应该像这样更新:
{
"name": "app-name","ticket": "JIRA-12345",....
是否有可能实现这一目标?如果是这样,如何?
解决方法
首先,npm 没有内置功能来满足您的要求。但是,可以使用自定义解决方案。考虑以下方法:
- 编写自定义 node.js 脚本,(按照下面提供的 prompt.js),它利用:
- node.js 内置
readline
模块,用于创建提示用户输入票号的界面。 - node.js 内置
fs.writeFile
方法,用于使用新票号更新 package.json。
- node.js 内置
- 要自动调用提示用户输入票号的过程(即在运行
build
npm 脚本之前),请使用 scripts 部分中的 npm pre script >package.json。有关预挂钩的更多信息,请参见 this article。
解决方案:
以下步骤描述了如何实现您的要求:
-
创建一个 node.js 脚本如下:
prompt.js
const readline = require('readline'); const { writeFile } = require('fs'); const pkgJsonFile = './package.json'; const pkgJsonData = require(pkgJsonFile); const rl = readline.createInterface({ input: process.stdin,output: process.stdout }); function updatePackageJson(ticketNumber) { pkgJsonData.ticket = ticketNumber; const newPkgJsonData = JSON.stringify(pkgJsonData,null,2) + '\n'; writeFile(pkgJsonFile,newPkgJsonData,'utf8',writeFileError => { if (writeFileError) throw writeFileError; }); } rl.question('Please enter the ticket number: ',ticketNumber => { rl.close(); updatePackageJson(ticketNumber); }); rl.on('SIGINT',() => { console.log('\nAborting ...'); process.exit(1); });
让我们将
prompt.js
保存在项目目录的根目录中,与 package.json 所在的级别相同:my-project ├── ... ├── node_modules │ └── ... ├── package.json └── prompt.js <----
-
接下来在名为
pre
的 package.json 文件的scripts
部分定义prebuild
脚本:package.json
... "scripts": { ... "prebuild": "node prompt.js",// <---- "build": "node build/build.js",},...
运行:
下次运行以下命令时:
npm run build
终端会出现如下信息提示:
Please enter the ticket number:
输入票号后,package.json 中的 "ticket"
条目将更新为新值,例如“JIRA-123”。随后 build
npm 脚本运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。