一个脚手架
npm install -g chuncli
项目提供了 create、 start、 build 三个命令
chcli create [options] <templateName> <projectName>
- templateName: vue | react
- projectName: 创建的项目名称
- options: -f | --force 当前目录存在同名文件夹时覆盖
chcli create [options]
- -D | --debug
开启 debug 模式,可以看到更多打印信息 - -C | --config <配置文件路径>
- 指定配置文件,不传入会查找项目内 chun.config.(js|json|mjs)
- 当存在多个优先级js>json>mjs
- 会对该配置文件监听,当有修改时会自动重启项目
- -P | --port <端口号>
指定端口号,默认使用8080,当端口不可用会使用新的可用端口 - -T | --type <启动项目类型>
可传入vue|react,不传默认为 vue
module.exports = {
defineConfig: {...},
hooks: [...],
plugins: [...]
}
- defineConfig: webpack 相关配置
格式同 webpack 配置 - hooks: chcli 钩子
module.exports = {
hooks: [
['registed', function (context) {}], // [触发阶段, 回调函数]
['registed', '../xx/xx.js'], // [触发阶段, 要执行的 js 文件路径]
['registed', 'saaa.js'], // [触发阶段, 要执行的 node_modules 中文件]
['xx', 'xx'] // 自定义hook,可以配合插件使用
]
}
// 触发阶段可选
// 1. registed: 解析完hooks后立即执行
// 2. unStarted: 启动之前
// 3. started: 启动完成后
- plugin: chcli 插件
module.exports = {
plugins: [
'pluginName', // node_modules 中插件
'./pluginName', // 项目内插件
function () {} // 直接写回调
]
}
如果要传参数
module.exports = {
plugins: [['pluginName', { a: 1 }]]
}
插件默认参数
module.exports = {
plugins: [['./testPligin.js', { a: 1 }]]
}
// testPligin.js
module.exports = function (API, params) {
console.log(params) // { a: 1 }
const { getWebpackConfig, getVal, setVal, emitHooks } = API
// getWebpackConfig: ()=> WebpackChain, 返回一个WebpackChain的实例,可以链式修改webpack配置
// getVal: (key:string)=> any 获取之前插件设置的内容
// setVal: (key:string, value: any)=> void 设置一个属性,后续插件可以使用
// emitHooks: (key: string)=> void 手动触发一类hook,可以配合自定义hook使用
}
插件会在执行完 registed hook 后依次执行
项目内置了 vue 和 react 的一些基础配置,同时可以从配置文件传入和插件传入,最终执行时会进行合并
merge(当前启动类型的基础配置, 配置文件中传入的配置, 插件修改的配置)
// 后面覆盖前面
chcli build [options]
- -C | --config <配置文件路径>
- 指定配置文件,不传入会查找项目内 chun.config.(js|json|mjs)
- 当存在多个优先级js>json>mjs
- 会对该配置文件监听,当有修改时会自动重启项目
- -T | --type <启动项目类型>
可传入vue|react,不传默认为 vue
配置文件最终执行情况同 start