如何为npm install添加注释到package.json?
我有一个简单的package.json文件,我想添加一条评论。 有没有办法做到这一点,或有什么黑客做这个工作?
{ "name": "My Project", "version": "0.0.1", "private": true, "dependencies": { "express": "3.x", "mongoose": "3.x" }, "devDependencies" : { "should": "*" /* "mocha": "*" not needed as should be globally installed */ } }
上面的示例注释不起作用npm中断。 我也试过//风格的评论。
最近在node.js邮件列表中已经讨论过了。
根据Isaac Schlueter创build的npm:
…“//”键永远不会被npm用于任何目的,并保留为注释…如果你想使用多行注释,你可以使用一个数组或多个“//”键。
{ "//": "this is the first line of a comment", "//": "this is the second line of the comment" } { "//": [ "first line", "second line" ] }
这里是另外一个用JSON添加注释的黑客技巧。 以来:
{"a": 1, "a": 2}
相当于
{"a": 2}
你可以做一些事情:
{ "devDependencies": "'mocha' not needed as should be globally installed", "devDependencies" : { "should": "*" } }
您总是可以滥用重复键被覆盖的事实。 这就是我刚刚写的:
"dependencies": { "grunt": "...", "grunt-cli": "...", "api-easy": "# Here is the pull request: https://github.com/...", "api-easy": "git://..." "grunt-vows": "...", "vows": "..." }
但是,不清楚JSON是否允许重复键(请参阅JSON语法是否允许在一个对象中使用重复键) 。它似乎适用于npm,所以我承担风险。
推荐的hack是使用"//"
键(来自nodejs邮件列表 )。 当我testing它时,它不适用于“依赖”部分。 另外,文章中的示例使用多个"//"
键,这意味着npm不会拒绝具有重复键的JSON文件。 换句话说,上面的黑客应该总是很好。
更新:重复密钥破解的一个恼人的缺点是npm install --save
安静地消除所有重复。 不幸的是,很容易忽视它,你的善意的评论已经消失了。
"//"
破解仍然是最安全的。 但是,多行注释也会被npm install --save
删除。
我有一个有趣的黑客想法。
创buildnpm包名称作为package.json中dependencies
和devDependencies
块的注释分隔符,例如x----x----x
{ "name": "app-name", "dependencies": { "x----x----x": "this is the first line of a comment", "babel-cli": "6.xx", "babel-core": "6.xx", "x----x----x": "this is the second line of a comment", "knex": "^0.11.1", "mocha": "1.20.1", "x----x----x": "*" } }
注 :必须添加最后评论分隔线与有效的版本,如*
在块中。
这里是我对package.json
/ bower.json
评论:
我有package.json.js
包含一个脚本,导出实际的package.json
。 运行脚本覆盖旧的package.json
并告诉我它做了什么样的改变,非常适合帮助你跟踪npm
所做的自动修改。 这样我甚至可以编程地定义我想要使用的包。
最新的咕噜声在这里: https : //gist.github.com/MarZab/72fa6b85bc9e71de5991
NPS(节点包脚本)为我解决了这个问题。 让你把你的NPM脚本放到一个单独的JS文件中,在这里你可以添加注释和任何其他需要的JS逻辑。 https://www.npmjs.com/package/nps
来自我的一个项目的package-scripts.js
示例
module.exports = { scripts: { // makes sure e2e webdrivers are up to date postinstall: 'nps webdriver-update', // run the webpack dev server and open it in browser on port 7000 server: 'webpack-dev-server --inline --progress --port 7000 --open', // start webpack dev server with full reload on each change default: 'nps server', // start webpack dev server with hot module replacement hmr: 'nps server -- --hot', // generates icon font via a gulp task iconFont: 'gulp default --gulpfile src/deps/build-scripts/gulp-icon-font.js', // No longer used // copyFonts: 'copyfiles -f src/app/glb/font/webfonts/**/* dist/1-0-0/font' } }
我只是做了一个本地安装npm install nps -save-dev
并把它放在我的package.json
脚本中。
"scripts": { "start": "nps", "test": "nps test" }
到目前为止,这里的大多数“黑客”都build议滥用JSON。 但是,为什么不滥用底层的脚本语言呢?
编辑最初的反应是把描述放在右边,用# add comments here
来包装它; 然而,这不适用于Windows,因为标志(例如npm run myframework – –myframework-flags)将被忽略。 我改变了我的反应,使其在所有平台上工作,并为了可读性目的添加了一些缩进。
{ "scripts": { "help": " echo 'Display help information (this screen)'; npm run", "myframework": "echo 'Run myframework binary'; myframework", "develop": " echo 'Run in development mode (with terminal output)'; npm run myframework" "start": " echo 'Start myFramework as a daemon'; myframework start", "stop": " echo 'Stop the myFramework daemon'; myframework stop" "test": "echo \"Error: no test specified\" && exit 1" } }
这会:
- 不要破坏JSON合规性(或者至less它不是黑客行为,而且您的IDE不会因为做出奇怪的,危险的事情而给予警告)
- 跨平台的作品(在macOS和windows上testing,假设在Linux上可以正常工作)
- 不妨碍运行
npm run myframework -- --help
- 运行
npm run
时将输出有意义的信息(这是npm run
的实际命令,以获取有关可用脚本的信息) - 提供一个更明确的帮助命令(如果某些开发人员不知道npm运行提供这样的输出)
- 当运行命令本身时,将显示命令及其描述
- 当打开
package.json
(使用less
或你最喜欢的IDE)
在浪费了一个小时的复杂和黑客解决scheme后,我发现自己是一个非常简单,优雅和有效的解决scheme,用于评论package.json
庞大的依赖关系部分。 像这样:
{ "name": "package name", "version": "1.0", "description": "package description", "scripts": { "start": "npm install && node server.js" }, "scriptsComments": { "start": "Runs development build on a local server configured by server.js" }, "dependencies": { "ajv": "^5.2.2" }, "dependenciesComments": { "ajv": "JSON-Schema Validator for validation of API data" } }
当以同样的方式sorting时,现在我可以非常容易地在git commit diffs中或者在使用package.json
在编辑器中跟踪这些依赖关系/注释对。
没有额外的工具,只是简单而有效的JSON。
希望这有助于任何人。