在包安装节点上显示许可证

时间:2016-02-21 02:03:54

标签: node.js npm npm-install

如何使用npm脚本和postinstall挂钩显示npm包的许可证。现在我正在这样做:

  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "postinstall": "cat ./MIT-license.txt"
  },
<{1>}上的

。但是这在Windows上失败了,因为package.json。我知道我们可以在Windows上使用cat来通过控制台输出文件的内容,但是如何在npm脚本中执行此操作(不会在窗口typecat上失败UNIX / MAC)?

1 个答案:

答案 0 :(得分:3)

如果我理解正确,您需要一个跨平台机制来将文件内容记录到控制台。我认为最简单的方法是通过自定义Node脚本,因为您知道用户将安装Node,无论其操作系统如何。

只需写一个这样的脚本:

// print-license.js
'use strict';

const fs = require('fs');

fs.readFile('./MIT-license.txt', 'utf8', (err, content) => {
  console.log(content);
});

然后,在你的package.json中:

// package.json
"scripts": {
  "postinstall": "node ./print-license.js"
},

或者,如果你不想要一个自制的脚本,这就足够短,可以内联,就像这样:

// package.json
"scripts": {
  "postinstall": "node -e \"require('fs').readFile('./MIT-license.txt', 'utf8', function(err, contents) { console.log(contents); });\""
},

更新

现在我考虑一下,使用可重用的可执行文件可能会更好,您可以将文件指定为命令行参数。这也很简单:

// bin/printfile
#!/usr/bin/env node
'use strict';

const FILE = process.argv[2];

require('fs').readFile(FILE, 'utf8', (err, contents) => {
  console.log(contents);
});

并将以下内容添加到package.json:

// package.json
"bin": {
  "printfile": "./bin/printfile"
},
"scripts": {
  "postinstall": "printfile ./MIT-license.txt"
}