参考
文档
细节
发布npm的scope包
只要不发布私包,不需要钱,参考
pnpm与workspace
创建文件pnpm-workspace.yaml
:1
2packages:
- 'scripts'
1 | // package.json |
然后在 scripts 目录下,新建 umi-scripts 包,
执行 pnpm install,
执行完后,会生成 pnpm-lock.yaml ,
并且为 scripts 下的 umi-scripts 包源码目录 创建一个软链接,
将此目录映射到 node_modules 下,
如果 umi-scripts 有bin命令,pnpm 也会为它生成一个.bin 目录的相关命令配置。
一切做好后, 你在项目中就可以愉快的使用 umi-scripts包了,
因为其本质是将源码目录全部放置到 node modules 下,与真正的npm install 无异,用起来一样。
更妙的是,它还可以创建了软链接,一旦修改,node modules 也会是最新的修改。
node 的 stdout 和 stderr
node 的 stdout和stderr 对应 node.js 标准/错误输出
另外一个 stdin 用于输入。1
2
3
4
5
6
7
8
9
10
11
12
13
14var cp = require('child_process');
//spawn
var ls = cp.spawn('mkdir'/*command*/, ['dd22d12']/*args*/, {}/*options, [optional]*/);
ls.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
ls.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
ls.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
默认情况下, child_process.spawn, 会在父 Node.js 进程和衍生的子进程之间建立 stdin、stdout 和 stderr 的管道。参考
另外一个例子,比如 stdin 输入:1
2
3
4
5
6
7
8
9
10process.stdout.write('nihao')
process.stdin.on('data',function(data){
process.stdout.write(`----${data}`)
if(data==1){
process.exit(0)
}
})
process.on('exit', function(data){
process.stdout.write(`exit----${data}`)
})
bin执行文件npm命令的特殊性
1 | { |
1 |
|
注意的是,凡事npm包的 bin 文件,虽然也是js文件,但此为特殊js文件,
比如上面的 esno , 本来需要使用 npx esno 来执行的,
因为它是 npx 的bin 文件,因此 只需要 esno 即可,不需要加npx esno
这是观察到现象,是否正确待进一步考证。
可以以 D:\git\umi\umi-next\scripts\bin\umi-scripts.js
为例子研究。