scripts/tnpm-sync-all.js (29 lines of code) (raw):
const path = require('path')
const { spawnSync, spawn } = require('child_process')
// 对所有非private包调用tnpm sync,同步到内网registery
// 写完这个脚本才发现,lerna exec tnpm sync 可以起到相同的效果。。。
;(async () => {
const rootDir = path.resolve(__dirname, '../')
const { stdout } = spawnSync('lerna', ['list'], { cwd: rootDir })
const pkgs = stdout
.toString()
.split('\n')
.filter(Boolean)
console.log(`start sync ${pkgs.length} pkgs...`)
const result = await Promise.all(
pkgs.map(async pkgName => {
return new Promise((res, rej) => {
const child = spawn('tnpm', ['sync', pkgName])
child.on('close', code => {
res({ pkgName, code })
})
})
})
)
const errPkgs = result
.filter(({ code }) => code !== 0)
.map(({ pkgName }) => pkgName)
if (errPkgs.length > 0)
console.error(`${errPkgs} errPkgs:
${errPkgs.join('\n')}
`)
else console.log(`all ${result.length} pkg sync successfully!`)
})()