Nodejs使用es module开发CLI
Nodejs使用es module开发CLI
这里主要介绍的不是CLI的开发,而是node使用es module开发cli的工程配置和注意事项
一、 package.json的配置
bin
bin字段是指定cli的执行文件的. 比如我将bin指定为, 那么当用户安装了此工具之后,系统会安装sm-cli这个可执行文件并且加入到系统环境变量中,可以在终端执行
命令,当执行这个命令的时候,其实就是运行的index.js文件。
bin字段可以跟上一个执行文件路径字符串,也可以跟上一个json对象,json对象中指定<命令名:执行文件名>。
// 安装之后,执行命令就是package.json中的name字段的值
{
"bin": "./index.js"
}
// 安装之后,执行命令是"sm-cli"
{
"bin": {
"sm-cli": "./index.js"
}
}
type
node默认的是cjs模块管理系统,我们可以通过设置type字段来开启使用es的模块管理系统。将type字段设置成"module"
e.g.
{
"type": "module"
}
preferGlobal
preferGloabl字段表示改工具模块更加倾向于全局安装,对与CLI工具来说,这个是需要设置成true的。
e.g.
{
"perferGlobal": true
}
二、 入口文件的配置
可执行文件的设置需要注意,因为我们选定了使用es module,但是在安装之后,node会使用commonjs的方式去执行文件,此时文件中的
import xxx from "xxxx"就会无法执行;解决方案是我们需要指定node的 --experimental-modules参数,--experimental-modules表示node的实验中的es 模块功能,指定了这个参数之后,node就可以执行es module文件代码了。
如何指定--experimental-modules呢?
需要在指定的文件中增加shebang(aka Hashbang)。shebang是一个由井号和感叹号构成的字符串序列,出现再文本的第一行,写过脚本语言的(比如python)一定对此不陌生。
开启--experimental-modules的shebang:
#!/usr/bin/env node --experimental-modules

三、 编写你的代码
以上的配置完成之后,可以使用es module开发node程序,并且之后也能正确的执行,剩下的就是你愉快的开发之旅了!
##Happy Coding##