基于 Yeoman 的 MDwiki 初始化脚手架
yeoman 简介
Yeoman 帮助我们创建项目,提供更好的工具来使我们的项目更多样化。详细参见: Yeoman
生成器的使用
// 全局安装 Yeoman 框架cnpm install -g yo cnpm install -g generator-zl-wiki-init // 创建一个用于开发的目录 zl-wiki-init-test zl-wiki-init-test > yo zl-wiki-initzl-wiki-init-test > dir //查看目录
生成的目录文件说明
生成器的开发
generator-zl-wiki-init目录结构
app
|-- index.js 主入口文件
|-- templates 用于构建的模板(目录和文件)
README.md 描述文件
package.json 包描述文件
package.json 说明
{
"name": "generator-zl-wiki-init",
"keywords": ["yeoman-generator"],
}
name 名称必须以 generator- 开头 keywords 中必须含有 yeoman-generator 关键词
index.js 说明
'use strict';
var path = require('path');
var generators = require('yeoman-generator');
// 定制控制台日志的输入样式,可以非常的个性化
// https://github.com/chalk/chalk
var chalk = require('chalk');
// 生成创建文件夹
// https://github.com/substack/node-mkdirp
var mkdirp = require('mkdirp');
// 使用 generators.Base.extend 扩展
module.exports = generators.Base.extend({
// 构造器
constructor: function() {
generators.Base.apply(this, arguments);
},
// 初始化
initializing: function() {
this.pkg = require('../package.json');
},
// 处理用户输入
prompting: {
},
// 创建目录和文件
writing: {
buildEnv: function() {
// 将 templates 中的内容复制到 当前位置
this.fs.copy(this.templatePath('.'), this.destinationPath('.'));
},
assetsDirs: function() {
// 创建 output 文件夹
// mkdirp.sync('output');
}
},
// 安装默认依赖
install: function() {
}
});
开发与调试
- 在生成器目录使用 npm link 或 cnpm link 进行挂载到全局 node_modules
- 使用 npm unlink 或 cnpm unlink 来去消挂载
- 使用 yo zl-wiki-init 来验证脚手架结果
generator-zl-wiki-init> cnpm link generator-zl-wiki-init-test> yo zl-wiki-init
npm 发布
- 到http://www.npmjs.org 上注册用户
- 使用 npm adduser 添加注册用户
- 使用 npm login 登录
- 使用 npm publish . 发布当前模块
注意事项:
- package.json 中 name 名称必须在 npmjs 中是不重复的. 否则不能发布. 可以通过访问 https://npmjs.com/package/ 来验证模块名称是否可用.
- 如果本地使用了淘宝的 NPM, 则在发布之前需要将切换 registry. 具体命令使用: npm config set registry http://registry.npmjs.org
本地快速开发调试
开发阶段,使用 cnpm link 将模块暴露在全局目录 node_modules 下
只需使用其中的一种即可.
1. npm link
C:\Users\xxx\AppData\Roaming\npm\node_modules\generator-zl-wiki-init -> E:\sync\fis3\generator-zl-wiki-init
2. cnpm link
C:\Program Files\nodejs\node_modules\generator-zl-wiki-init -> E:\sync\fis3\generator-zl-wiki-init
结束后, 使用 npm unlink 或 cnpm unlink 解除
package.json
- name 名称必须是以 generator- 开头, 如: generator-zl-wiki-init
- keywords 中必须要有 yeoman-generator 关键词. 如: "keywords": ["yeoman-generator"]
GIT 操作
git init
git remote add origin git@git.oschina.net:icode2017/generator-zl-wiki-init.git
NPM 发布时遇到的坑
因为本地采用了淘宝的 NPM,因此在 npm login 时是登录到 http://registry.npm.taobao.org/
在发布之前,应当将 npm 的 registry 临时改为 http://registry.npmjs.org
npm config set registry http://registry.npmjs.org
npm login
Username: 输入你在npmjs.org上注册的用户名
Password:
Email:(this IS public):
npm publish .
如果没有 npmjs.org 上的用户, 请移步到 http://www.npmjs.org 上注册