npm link 安装本地模块,将本地模块cli化
第三方学习地址
http://mp.weixin.qq.com/s?__biz=MzAxMTU0NTc4Nw==&mid=2661157390&idx=1&sn=6d96e54f1c4ecd5201a03fe76cc5f5a9&chksm=80d5d7dab7a25ecc5d1c47e81b32a4c88e8d70b1fcfd849777ca9605d8326339dff9e29e6e37&mpshare=1&scene=23&srcid=1218i1tXLnRQfPHvJmqSyRHR#rd
1)初始化模块
确认模块名称
$ npm info xxx
如果没有找到对应的包,说明你可以使用这个名字,然后在github建立仓库,clone到本地即可
$ npm init -y
2)cli二进制模块
Node.js分2种模块
-
普通模块,供代码调用
-
二进制模块,提供cli调用
大家都知道,生成器是cli工具,所以我们应该使用cli二进制模块
手动修改package.json文件,增加 bin 配置
{ "name": "a", "version": "1.0.0", "description": "", "main": "index.js", "bin": { "gen": "gen.js" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC"
}
这里主要增加里一个bin
的配置,bin里的gen
为cli的具体命令,它的具体执行的文件gen.js,大家看到这是一个plain old object类型,所以可以配置多个命令的,各位可以按照自己的喜好来。
既然gen
的执行文件是gen.js
,我们当然需要创建创建它
$ touch gen.js
如果是windwo 也可以选择这样写:#! E:\nodejs\node
#!/usr/bin/env node var argv = process.argv; var filePath = __dirname; var currentPath = process.cwd(); console.log(argv) console.log(filePath) console.log(currentPath)
说明
-
argv是命令行的参数
-
filePath是当前文件的路径,也就是以后安装后文件的路径,用于存放模板文件非常好
-
currentPath是当前shell上下文路径,也就是生成器要生成文件的目标位置
至此,二进制模块的代码就写完了,下面我们测一下
1)本地安装此模块
在package.json文件路径下,执行
$ npm link
/Users/sang/.nvm/versions/node/v4.4.5/bin/gen -> /Users/sang/.nvm/versions/node/v4.4.5/lib/node_modules/a/gen.js/Users/sang/.nvm/versions/node/v4.4.5/lib/node_modules/a -> /Users/sang/workspace/github/i5ting/a
此时说明已经安装成功了。
2)执行gen测试
$ gen
[ '/Users/sang/.nvm/versions/node/v4.4.5/bin/node', '/Users/sang/.nvm/versions/node/v4.4.5/bin/gen' ]/Users/sang/workspace/github/i5ting/a/Users/sang/workspace/github/i5ting/a
可以换不同的目录来测试一下,看看结果的不同,来体会上面3个变量的妙用。