const fs = require('fs'); const path = require('path'); function scanAndCreate(structure, root = process.cwd()) { Object.keys(structure) .forEach(name => { if (typeof structure[name] === 'object') { fs.mkdirSync(path.resolve(root, name)); scanAndCreate(structure[name], path.resolve(root, `./${name}`)); } else if (structure[name] === '') { fs.appendFileSync(path.resolve(root, name), ''); } else if (typeof structure[name] === 'string') { const content = fs.readFileSync(structure[name]).toString(); fs.appendFileSync(path.resolve(root, name), content); } }); } module.exports = { exec: async args => { if (!args.init) { throw new Error(`Command init not found in args`); } if (!args.name) { throw new Error('Command --name=... not found in args'); } const name = args.name; const structure = { [`${name}_worker`]: { 'main_thread': { action: {}, [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread_template.ts'), }, utils: { 'action_type.ts': '', }, 'worker_thread': { action: {}, [`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread_template.ts'), }, }, }; scanAndCreate(structure); }, }; // 结构 // -xxx_worker // -|--main_thread // -|--|--action // -|--|--xxx_main_thread.ts // -|--utils // -|--|--action_type.ts // -|--worker_thread // -|--|--action // -|--|--worker_main_thread.ts