每次创建项目都要搞一大阵子,太烦了,找个脚手架二开吧!
去GitHub拉下来代码:GitHub - ZnFrontEnd/zn-cli: 锌脚手架
大体轮廓
目录结构:
├── LICENSE.txt
├── README.md
├── bin
│ └── fe.js
├── lib
│ ├── cli
│ │ └── index.js
│ ├── cmd
│ │ ├── add.js
│ │ ├── delete.js
│ │ ├── init.js
│ │ └── list.js
│ ├── table.js
│ └── tip.js
├── package-lock.json
├── package.json
└── template.json
在package.json中可以看到入口文件是./bin/fe.js
#!/usr/bin/env node
const tip = require('../lib/tip');
const currentNodeVersion = process.versions.node;
const semver = currentNodeVersion.split('.');
const major = semver[0];
const BASE_VERSION = 10;
if(major < BASE_VERSION) {
tip.fail(
'You are running Node ' +
currentNodeVersion +
'.\n' +
'Create React/Vue App requires Node '+ BASE_VERSION +' or higher. \n' +
'Please update your version of Node.'
)
process.exit(1);
}
require('../lib/cli/');
这里有一些环境检测,继续追踪到lib/cli/index.js
#!/usr/bin/env node
'use strict';
const program = require('commander');
const packageJson = require('../../package.json');
program
.version(packageJson.version)
program
.command('init')
.description('生成一个项目')
.alias('i')
.action(() => {
require('../cmd/init')();
});
program
.command('list')
.description('查看模板列表')
.alias('l')
.action(() => {
require('../cmd/list')();
});
program
.command('add')
.description('添加模板')
.alias('a')
.action(() => {
require('../cmd/add')();
});
program
.command('delete')
.description('删除模板')
.alias('d')
.action(() => {
require('../cmd/delete')();
});
program.parse(process.argv);
if(!program.args.length){
program.help();
}
注册了init、list、add、delete
四个命令。
对应实现都在cmd里了。
里面也没啥意思了,好像全网一个模板。
二开?
这几个够我用的了,有需求再说吧。
我把作者的模板删了,添加了两份自己的
> h-cli list
模板列表:
┌─────────┬───────────────────┬─────────────────────────────────────────────────────────────────┐
│ name │ description │ url │
├─────────┼───────────────────┼─────────────────────────────────────────────────────────────────┤
│ webpage │ test │ https://e.coding.net/dailycode/coding-demo/websiteTemplate.git │
├─────────┼───────────────────┼─────────────────────────────────────────────────────────────────┤
│ ts-node │ typescript-nodejs │ https://e.coding.net/dailycode/coding-demo/ts-node-template.git │
└─────────┴───────────────────┴─────────────────────────────────────────────────────────────────┘
对了,我修改了原本zn-cli的命令,改成了h-cli,在package.json入口bin的位置,改完了npm link一下就能用了。