packages/preset-monorepo/src/childProcess.ts (54 lines of code) (raw):

// @ts-ignore const sendMsg: (data: { success: boolean; data?: object; err?: object; // @ts-ignore }) => void = process.send.bind(process); async function getJestConfigForPackage(packageDir: string) { // 用【子包下的node_modules的@alicloud/console-toolkit-cli包】来创建一个breezr实例 // 由这个breezr实例来读取子包的breezr配置 const { Service: BreezrService } = require(require.resolve( '@alicloud/console-toolkit-core', { paths: [packageDir], } )); const breezrInstance = new BreezrService({ cwd: packageDir }); await breezrInstance.init({}); const packageJestConfig = breezrInstance.invokeSync('getJestConfig'); return packageJestConfig; } process.on('message', async ({ packageDir }) => { // validate arguments if (!packageDir) { sendMsg({ success: false, err: { msg: 'no packageDir given', }, }); return; } // try to get jestConfig let jestConfig; try { jestConfig = await getJestConfigForPackage(packageDir); } catch (error) { sendMsg({ success: false, err: { msg: `error from getJestConfigForPackage("${packageDir}")`, error, }, }); return; } // validate result if (typeof jestConfig !== 'object') { sendMsg({ success: false, err: { msg: `expect jestConfig to be object, but got ${jestConfig}`, }, }); return; } // success sendMsg({ success: true, data: jestConfig, }); });