npm link实现自定义node 命令

1,262 阅读2分钟

认识

开发NPM模块的时候,有时我们会希望,边开发边试用,比如本地调试的时候,require('myModule')会自动加载本机开发中的模块。Node规定,使用一个模块时,需要将其安装到全局的或项目的node_modules目录之中。对于开发中的模块,解决方法就是在全局的node_modules目录之中,生成一个符号链接,指向模块的本地目录。

npm link就能起到这个作用,会自动建立这个符号链接。

初始化一个package.json

npm init -y
{
  "name": "webpack-cli",
  "version": "1.0.0",
  "main": "index.js",
  "bin": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/fionaVg1/webpack.git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/fionaVg1/webpack/issues"
  },
  "homepage": "https://github.com/fionaVg1/webpack#readme",
  "description": ""
}

这个时候执行

npm link

则会将webpack-cli模块安装在全局的node_modules目录之中:

C:\Users\Administrator\AppData\Roaming\npm\node_modules\webpack-cli\index.js

这个时候执行

webpack-cli

其实执行的就是index.js(package.json中bin对应的是index.js)

console.log(1);

发现报错了

因为windows不知道如何去执行index.js中的脚本,这个时候需要指定执行方式 修改index.js的内容:告诉系统用node去执行index.js

#!/usr/bin/env node
console.log(1);

发现控制台正常的输出了1

思考

如何实现webpack-cli create -t vue -n shop 该命令
实现一个工具:通过以上命令创建对应类型(vue、h5、node、react、angularJs等等)的项目

修改index.js

#!/usr/bin/env node
let program = require('commander');
program.version('0.0.0')
    .option('-t,--type <type>', 'project type')
    .option('-n,--name <name>', 'project name')
program.command('create').action(function (name) {
    console.log(program.name,program.type);
});
program.parse(process.argv);

可以看到控制台已经打印出了

说明已经可以解析create命令,并且-t和-n的参数也可以获取到了

延伸

如果想完成上面那个小工具:创建对应类型的项目,则直接在action回调中执行creatProject()即可。createProject中实现项目初始化,模板拉取等。这个就不在这里实现了。