如何为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中dependenciesdevDependencies块的注释分隔符,例如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" } } 

这会:

  1. 不要破坏JSON合规性(或者至less它不是黑客行为,而且您的IDE不会因为做出奇怪的,危险的事情而给予警告)
  2. 跨平台的作品(在macOS和windows上testing,假设在Linux上可以正常工作)
  3. 不妨碍运行npm run myframework -- --help
  4. 运行npm run时将输出有意义的信息(这是npm run的实际命令,以获取有关可用脚本的信息)
  5. 提供一个更明确的帮助命令(如果某些开发人员不知道npm运行提供这样的输出)
  6. 当运行命令本身时,将显示命令及其描述
  7. 当打开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。

希望这有助于任何人。