https://segmentfault.com/a/1190000010665132
http://www.reibang.com/p/9f3e6bcdb274
初始化
安裝nodejs
npm install -g yo
npm install -g generator-generator
yo generator //初始化項(xiàng)目模版
項(xiàng)目名稱自己設(shè)置,必須是以generator-開(kāi)頭佛南,協(xié)議選擇MIT
配置
generators/app/templates/
是默認(rèn)存放文件的目錄耸采,把所有模版文件放在這個(gè)目錄下
/generators/app/index.js
是Yeoman的配置文件耀找,定義如何生成我們的腳手架
///generators/app/index.js
'use strict';
const Generator = require('yeoman-generator');
const chalk = require('chalk');
const yosay = require('yosay');
const path = require('path');
const mkdirp = require('mkdirp');
module.exports = class extends Generator {
//初始化方法辉浦,用于獲取項(xiàng)目狀態(tài)饭寺、配置等
initializing() {
this.props = {};
}
// 信息采集 獲取用戶輸入
prompting() {
this.log(
yosay(`Welcome to the remarkable ${chalk.red('generator-qxm-mobile')} generator!`)
);
const prompts = [{
type: 'input',
name: 'projectName',
message: '項(xiàng)目名稱',
default: 'my-project'
}];
return this.prompt(prompts).then(props => {
// To access props later use this.props.someAnswer;
this.props = props;
});
}
defaults() {
if (path.basename(this.destinationPath()) !== this.props.projectName) {
this.log(
'Your generator must be inside a folder named ' + this.props.projectName + '\n' +
'I\'ll automatically create this folder.'
);
// 引用mkdirp模塊創(chuàng)建文件夾 ,this.destinationRoot 設(shè)置要?jiǎng)?chuàng)建的工程的根目錄胡控。
mkdirp(this.props.projectName);
this.destinationRoot(this.destinationPath(this.props.projectName));
}
}
//執(zhí)行文件寫(xiě)操作扳剿,即項(xiàng)目文件寫(xiě)入文件系統(tǒng)中
writing() {
this.fs.copy(
this.templatePath('src'),
this.destinationPath('src')
);
}
//安裝依賴
install() {
// this.installDependencies();
}
// 最后執(zhí)行,可清楚臨時(shí)文件等
end() {
this.log(
chalk.green('項(xiàng)目構(gòu)建成功, 請(qǐng) `npm install` 安裝依賴, 然后執(zhí)行 `gulp` 運(yùn)行')
);
}
};
測(cè)試
由于我們?cè)诒镜亻_(kāi)發(fā)昼激,并不知道用起來(lái)怎么樣庇绽,所以可以使用 npm link
命令,相當(dāng)于在全局安裝了此腳手架橙困,然后在新文件夾中執(zhí)行yo瞧掺,選擇腳手架,便可以測(cè)試
yo qxm-mobile
發(fā)布
generator-qxm-mobile/package.json
中的name
要在https://www.npmjs.com/沒(méi)被創(chuàng)建過(guò)凡傅,才可以發(fā)布辟狈。
發(fā)布需要一個(gè)npm
的賬號(hào),如果沒(méi)有使用npm adduser
創(chuàng)建夏跷;
如果已有賬號(hào)哼转,運(yùn)行npm login
登陸。
在項(xiàng)目根目錄下槽华,運(yùn)行npm publish
就可以發(fā)布了壹蔓。如果更新后重新發(fā)布,注意修改根目錄下的package.json
文件中的版本號(hào)猫态。
使用npm unpublish 包名
命令可以撤銷發(fā)布佣蓉,只有在發(fā)包的24小時(shí)內(nèi)才允許撤銷發(fā)布的包。