在包安装节点上显示许可证
Display license on package install node
如何使用 npm
脚本和 postinstall
挂钩来显示 npm
包的许可证。现在我正在这样做:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"postinstall": "cat ./MIT-license.txt"
},
在 package.json
上。但这在 windows 上失败了,因为 cat
。我知道我们可以在 windows 上使用 type
通过控制台输出文件的内容,但是如何在 npm 脚本中执行此操作(不会在 [=24= 上失败 cat
] 和 type
在 unix/mac)?
如果我没理解错的话,您需要一种跨平台机制来将文件内容记录到控制台。我认为最简单的方法是通过自定义 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"
}
如何使用 npm
脚本和 postinstall
挂钩来显示 npm
包的许可证。现在我正在这样做:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"postinstall": "cat ./MIT-license.txt"
},
在 package.json
上。但这在 windows 上失败了,因为 cat
。我知道我们可以在 windows 上使用 type
通过控制台输出文件的内容,但是如何在 npm 脚本中执行此操作(不会在 [=24= 上失败 cat
] 和 type
在 unix/mac)?
如果我没理解错的话,您需要一种跨平台机制来将文件内容记录到控制台。我认为最简单的方法是通过自定义 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"
}