#创建一个可全局运行的nodejs插件package并发布到npm
目标
创建新项目时,我只需要输入一条命令,就能生成规范、可读的目录结构
原理
在package当中内置一份example demo,根据命令行传过来的选项,输出对应的包含目录结构的demo到当前路径
步骤
1.首先构建规范的目录结构(cmd下用tree /f命令就能打印出来)
drunk-generator │ package.json │ README.md │ ├─bin │ drunk-generator.js │ ├─example │ ├─app │ │ │ index.html │ │ │ │ │ ├─src │ │ │ │ app.js │ │ │ │ │ │ │ ├─common │ │ │ │ ajax.js │ │ │ │ config.js │ │ │ │ │ │ │ └─module │ │ │ homepage.js │ │ │ subpage.js │ │ │ │ │ └─tpl │ │ ├─module │ │ │ home-page.html │ │ │ sub-page.html │ │ │ │ │ └─widget │ │ header.html │ │ │ └─simple │ │ index.html │ │ │ ├─src │ │ │ app.js │ │ │ │ │ ├─common │ │ │ ajax.js │ │ │ config.js │ │ │ │ │ └─module │ │ homepage.js │ │ │ └─tpl │ └─widget │ header.html │ └─lib index.js
可以看出来,我定义了一个插件,名字是根目录drunk-generator,第一级子目录包含bin、lib、package.json、README.md,我还自定义了一个example目录,用于存放我的标准demo,目录结构正是我需要的结构
注: package.json的说明可以参考
2.bin目录下的drunk-generator.js就是可执行文件的入口
#!/usr/bin/env nodevar lib= require('../lib/index.js');var myArgs = process.argv.slice(2);lib.createModule(myArgs);
3.入口里面调用了真正的处理函数就是createModule,并把命令行参数传了进去,处理函数在lib/index.js当中
var gulp = require('gulp');var debug = require('gulp-debug');var path = require('path');module.exports = { //创建 createModule: function () { var type = arguments[0];//对应命令行第一个参数 //默认对应simple。 var source =__dirname+'/../example/simple/**/*.*'; var targetPath = process.cwd(); //对应app。 if (type == 'app') { source = __dirname+'/../example/app/**' }; source = path.normalize(source); console.log('[gulp-generater]ready to copy to ',targetPath,'type is',type); gulp.src([source]) .pipe(debug({title:'debug:',minimal:false})) .pipe(gulp.dest(targetPath)); }};
可以看到,其实逻辑非常简单,就是把drunk-generator里面对应example下面的模块拷贝到当前的目录里面(process.cwd())(还有其他方式复制移动文件,就不详述了)
注: 依赖gulp、gulp-debug 喔~未安装的话需要npm install 一下
##安装&发布
两条命令
cd drunk-generator
npm init
npm publish
(若本地没有user信息需要提前添加)
好了发布上去了,上一搜果然有阿,那个鸡冻呀,第一个这么顺利
##使用 npm install drunk-generator -g mkdir myModule && cd myModule drunk-generator app
##效果 mymodule
│ index.html │ ├─src │ │ app.js │ │ │ ├─common │ │ ajax.js │ │ config.js │ │ │ └─module │ homepage.js │ subpage.js │ └─tpl ├─module │ home-page.html │ sub-page.html │ └─widget header.html 就是我相应的效果,一条命令生成规范目录结构,再也不用拷一堆东西结果各种报错了,只需关注业务开发就行了,而且同事一看就知道该维护或修改哪些地方。规范就是能提高效率阿附:源码
##参考