下面是实现项目工程自动初始化的标准流程:
1. 创建项目
在命令行中创建项目文件夹,并在其内部添加项目 package.json
文件。
mkdir auto-init-project
cd auto-init-project
npm init -y
2. 创建node cli工具
使用以下命令生成一个全局安装的包,该包将成为node命令行工具。
npm i -g
3. 添加脚手架模板
在项目文件夹中创建一个文件夹,并添加项目模板文件。
mkdir templates
touch index.html
touch app.css
touch app.js
4. 构建命令行工具
在项目根目录中创建一个 index.js
文件,并编写以下代码:
#!/usr/bin/env node
const inquirer = require('inquirer');
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const ncp = require('ncp');
const copy = promisify(ncp);
async function makeProject() {
const answer = await inquirer.prompt([
{
type: 'input',
name: 'name',
message: '项目名称:',
},
{
type: 'input',
name: 'description',
message: '项目描述:',
},
{
type: 'input',
name: 'author',
message: '作者:',
},
{
type: 'input',
name: 'template',
message: '选择模版:',
default: 'default'
},
]);
let templateDir = answer.template;
if (answer.template === 'default') {
templateDir = path.join(__dirname, 'templates');
}
const targetDir = path.join(process.cwd(), answer.name);
if (fs.existsSync(targetDir)) {
console.error('目录已经存在: %s', targetDir);
process.exit(1);
}
console.info(`正在使用 ${templateDir} 模版创建 ${answer.name} 目录...`);
await copy(templateDir, targetDir);
const packageJson = path.join(targetDir, 'package.json');
const data = fs.readFileSync(packageJson);
const packageData = JSON.parse(data);
packageData.name = answer.name;
packageData.description = answer.description;
packageData.author = answer.author;
fs.writeFileSync(packageJson, JSON.stringify(packageData, null, 2));
console.info(`[${answer.name}] 目录创建完成!`);
}
makeProject()
.then(() => {})
.catch((err) => {
console.error(err);
process.exit(1);
});
上述代码完成了以下操作:
- 使用
inquirer
获取用户的输入。 - 创建项目文件夹,并复制脚手架模板文件到项目目录中。
- 更新项目
package.json
文件并以输入的信息替换默认信息。
5. 安装依赖包
需要安装以下依赖包:
- inquirer:用于命令行交互。
- ncp:用于文件系统拷贝。
在根目录中创建并编辑package.json文件。
{
"name": "auto-init",
"version": "1.0.0",
"description": "Auto init project",
"main": "index.js",
"bin": {
"create-project": "./index.js"
},
"keywords": [],
"author": "Your Name",
"license": "MIT",
"dependencies": {
"inquirer": "^7.3.3",
"ncp": "^2.0.0"
}
}
使用以下命令来安装依赖项。
npm install
6. 测试命令行工具
可以使用以下方式来测试命令行工具是否正常工作。打开终端并运行以下命令。
create-project
此时将会出现一组提示信息,按要求分别输入即可创建初始化工程项目。具体可以参考下方的演示示例。
示例一:
$ create-project
项目名称: blog
项目描述: my blog
作者: alucard
选择模版: default
正在使用 /Users/alucard/node/app/projects/auto-init/templates 模版创建 blog 目录...
[blog] 目录创建完成!
示例二:
$ create-project
项目名称: shop-admin
项目描述: shop management system
作者: alucard
选择模版: default
正在使用 /Users/alucard/node/app/projects/auto-init/templates 模版创建 shop-admin 目录...
[shop-admin] 目录创建完成!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node命令行工具之实现项目工程自动初始化的标准流程 - Python技术站