#创建一个可全局运行的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 node
var 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信息需要提前添加)
好了发布上去了,上npmjs.com一搜果然有阿,那个鸡冻呀,第一个插件这么顺利
##使用 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 就是我相应的效果,一条命令生成规范目录结构,再也不用拷一堆东西结果各种报错了,只需关注业务开发就行了,而且同事一看就知道该维护或修改哪些地方。规范就是能提高效率阿
附:源码git传送门
##参考 https://quickleft.com/blog/creating-and-publishing-a-node-js-module/