我们常用的vue-cli,nuxt,eslint,babel,webpack等都可以直接使用他们提供的命令
例如
# npm install eslint
eslint --init
eslint yourfile.js
# npm install vue-cli
vue create "文件夹名称"
vue serve
实现一个自定义的命令
可以在你当前项目,或者创建一个新的项目,修改package.json
{
...
"bin": {
"hibobi-react-cli": "./bin/hibobi.js" // commandName 命令的名称
},
...
}
#!/usr/bin/env node
const fs = require('fs')
const path = require('path')
const c = require('ansi-colors')
let createFilePath;
process.argv.forEach((text, index) => {
if (text === '--create' || text === '-c') {
createFilePath = process.argv[index + 1]
}
if (text === '--output' || text === '-o') {
// ...
}
// ...
})
if (!createFilePath) {
console.log(c.yellow("Usage: create [options] <app-name>"))
console.log(c.yellow("hibobi-react-cli -c <app-name>"))
return
}
const exclude = ['node_modules', 'bin', 'package-lock.json', 'yarn.lock']
const checkDirectory = function (src, dst, callback) {
fs.access(dst, fs.constants.F_OK, (err) => {
if (err) {
fs.mkdirSync(dst);
callback(src, dst);
} else {
callback(src, dst);
}
});
}
const copy = function (src, dist) {
const paths = fs.readdirSync(src); //同步读取当前目录
paths.forEach(function (path) {
if (exclude.includes(path)) {
return;
}
var _src = src + '/' + path;
var _dist = dist + '/' + path;
fs.stat(_src, function (err, stats) { //stats 该对象 包含文件属性
if (err) throw err;
if (stats.isFile()) { //如果是个文件则拷贝
let readable = fs.createReadStream(_src);//创建读取流
let writable = fs.createWriteStream(_dist);//创建写入流
readable.pipe(writable);
} else if (stats.isDirectory()) { //是目录则 递归
checkDirectory(_src, _dist, copy);
}
});
});
}
try {
const target = path.resolve(createFilePath);
const source = path.resolve(__dirname, '../');
fs.mkdirSync(target);
copy(source, target);
} catch (e) {
console.error(c.red(e))
}
实践你的指令
创建一个新的文件夹
mkdir demo
cd demo
npm init
修改 package.json
"dependencies": { "my-lib": "file:/home/xxx/mylib" } // 这里建议写上绝对路径
npm install // 安装依赖
// npx 在执行node_module/.bin 下面的指令时,可以使用npx
// 全局安装后,直接使用 hibobi-react-cli
npx hibobi-react-cli
Usage: create [options] <app-name>
hibobi-react-cli -c <app-name>
Usage: create [options] <app-name>
npx hibobi-react-cli -c demo
测试完毕,没问题后,npm publish 发布你的项目
然后就可以直接使用,你自己定义的指令了。