npm开发简述
最近公司相关业务有需要写npm插件公用,正好之前没接触过,可以尝试着做。
在开发过程中我遇到了不少问题(主要是英文差,看不了文档…囧),然而在查baidu的时候发现,基本找到的都是介绍如何发布,貌似没几个详细的开发过程的…只能找认识的前端大神求救才知道真相,心塞…
以下是npm插件开发的基本流程,我将以一个发送文件的插件作为例子说明,希望对其他人有所帮助。
先列几个要注意的点~
1. bin
做npm插件其实和做项目是一样的。先新建项目目录,npm init 生成相关的 poject.json 信息,如插件名,入口文件,git地址等等,其中要注意的是bin属性。
这个属性在插件被安装的时候会被npm读取,找到相应的运行文件并生成指令,如 webpack 的运行命令,没写是找不到插件的。一般插件会把这个运行文件放在bin目录里,如下:
在你的插件被安装之后,npm会生成相关的文件(如图)
使用者可以运行如上述例子的 [ poject-deploy ] 即可运行插件。
2. bin的入口文件一定要在顶部加上
#!/usr/bin/env node
否则会报错无法运行。
3. 项目文件路径
网上文档一大堆,但是初学者很容易犯晕,其实只要搞清楚以下个就好了
// 脚本当前目录的父目录
../dir
../file
// 这几个都是脚本当前目录的
./dir
./file
path.resolve(__dirname, 'dir')
path.resolve(__dirname, 'file')
// 运行命令的目录
path.resolve('.', 'dir')
path.resolve('.', 'file')
简单来说,要引用父目录的文件
要引入当前目录的文件
要引用命令运行目录的脚本,哪怕rf.js在lib下面再深几层目录,只要命令行运行在根目录,一样可以获取到index.js
4. 命令行参数获取
像webpack等插件,在运行命令的时候,通常我们可以在命令后面加上参数表示不同运行逻辑,这个参数的获取需要用node全局变量,具体可以看 文档介绍,这里就不加阐述了。
// print process.argv
process.argv.forEach(function(val, index, array) {
console.log(index + ': ' + val)
})
$ node process.js one two=three four
0: node
1: /Users/node/process.js
2: one
3: two=three
4: four
说了这么多,有没有get到一点点?
如果有吸收到,那就可以嘿嘿嘿了。
没有也没关系,反正字多我也不想看,直接去下载试试就知道啦,也可以仿照写一个哦
poject-deploy:
npm地址
github