이 문서의 내용은 node.js를 사용하여 명령줄 도구를 만드는 것입니다. 특정 참조 값이 있습니다. 필요한 친구가 참조할 수 있습니다.
inquirer.js: 공통적으로 캡슐화하는 패키지입니다. 사용된 명령 새로운 명령줄 애플리케이션을 쉽게 구축할 수 있는 줄 상호 작용을 위한 node.js 모듈입니다.
shell.js: 크로스 플랫폼 유닉스 쉘 명령 모듈.
Node 버전: inquirer.js의 비동기 방식은 기본적으로 Promise를 반환하므로 node.js>=8을 사용하는 것이 좋습니다.
온라인에 접속하기 전 마지막 단계에서는 테스트, 컴파일, 버전 번호 업데이트, 제출, 심지어 동일한 명령 실행까지 필요합니다. 한 번의 클릭으로 이러한 단계를 자동화하는 동시에 오류 및 누락을 방지하기 위해 사전 확인이 수행됩니다.
새 Node.js 프로젝트를 만듭니다.
bin/my-cli.js 파일을 만듭니다. Node.js 프로젝트는 일반적으로 cli 항목을 bin 디렉터리에 배치하고 다른 모듈은 lib 디렉터리에 배치합니다.
bin/my-cli.js 파일 헤더에 #!/usr/bin/env 노드
를 추가하세요. #!/usr/bin/env node
。
添加 "bin": {"my-cli": "./bin/my-cli.js"},
到package.json,声明我们要使用的命令。
项目根目录下执行npm link
,创建一个全局命令my-cli
。
稍微修改下my-cli.js
,添加代码console.log("I am a cli tool!")
,然后打开控制台运行my-cli
命令,如果看到控制台输出I am a cli tool!
就表示成功。
首先安装主要依赖的两个模块(关于这两个模块的使用请参考官方文档)
npm install inquirer shelljs
接下来首先实现测试、更新版本号、构建、自动提交发布的自动化
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); const { version } = await inquirer.prompt([ { type: 'list', name: 'version', message: '版本号更新方式:', choices: [ { name: `v${semver.inc(pkg.version, 'patch')}: Fix Bugs / Patch`, value: 'patch' }, { name: `v${semver.inc(pkg.version, 'minor')}: Release New Version`, value: 'minor' }, ] } ]); // 拉取最新版本 shelljs.exec('git pull'); // 运行测试 shelljs.exec('npm test'); //通过npm version更新版本号,但不自动添加git tag,而是在构建完成后由cli工具添加 shelljs.exec(`npm version ${version} --no-git-tag-version`); // 构建 shelljs.exec('npm run build'); // 提交发布代码 const nextVersion = semver.inc(pkg.version, version); shelljs.exec('git add . -A'); shelljs.exec(`git commit -m "build: v${nextVersion}"`) shelljs.exec(`git tag -a v${nextVersion} -m "build: ${nextVersion}"`); shelljs.exec("git push") shelljs.exec("git push --tags");
接下来给my-cli
添加一个功能:
当检查到package.json的my-cli
对象的check-baidu-id
属性为true
时,检查项目的config.json
是否存在baidu-id
"bin": {"my-cli": "./bin/my-cli.js"},
를 추가하여 사용하려는 명령을 선언하세요. 프로젝트 루트 디렉터리에서 npm link
를 실행하여 전역 명령어 my-cli
를 생성합니다. my-cli.js
를 약간 수정하고 console.log("I am a cli tool!")
코드를 추가한 다음 console my-cli
명령을 실행합니다. 콘솔 출력 I am a cli tool!
이 표시되면 성공을 의미합니다.
먼저 주요 종속성인 두 모듈을 설치합니다. (이 두 모듈의 사용은 공식 문서를 참조하세요)
npm install inquirer shelljs
빌드 및 릴리스 프로세스 자동화
다음 먼저 테스트 자동화, 버전 번호 업데이트, 빌드, 자동 제출 및 릴리스 구현 다음으로 위 내용은 node.js를 사용하여 명령줄 도구 빌드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!if (pkg['my-cli'] && pkg['my-cli']['check-baidu-id']) {
const configPath = path.join(process.cwd(), 'config.json');
if (!fs.existsSync(configPath)) {
shelljs.echo('找不到config.json');
shelljs.exit(1);
}
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
if (!config['baidu-id']) {
shelljs.echo('config.json缺少属性[baidu-id]');
shelljs.exit(1);
}
my-cli
에 기능 추가 >:패키지가 체크되면 json의 my-cli
객체의 check-baidu-id
속성이 true
일 때, 프로젝트의 config.json
baidu-id
속성이 존재하는지