随着前端技术发展,现在的前端体系基本离不开nodejs来构建,而nodejs强大的背后,肯定是离不开其开放生态下所诞生的开源库和包,今天主要谈谈这些开源库包的一些知识。
一. node包分析
每一门后台语言都有一些库,这些库一类是封装计算机底层的一些功能接口,以语言自己本身的标准暴露给开发者,在nodejs中有http,TCP等一些自带模块属于此类;也有一部分库是把某种用途以最佳实践的方式进行封装,然后提供给开发者使用,像常用的moment,eslint等属于此类库。
在nodejs中,要使用它的包则需要通过一个叫npm的命令去安装它,npm的全称叫node package manage,释义为nodejs的包管理工具。当你要安装某个包时,使用如下格式即可。
npm i 包名
由于npm默认去国外的镜像上拉资源,速度很慢,如果你在国内可以使用cnpm,或者在~/目录下新加.npmrc文件,将国内的镜像地址写入。
npm i -g cnpm
cnpm i 包名
接下来看一下这些被安装的包是如何被加载和使用的。
可以看到,npm i的实质则是下载文件,将目标资源下载到了一个叫node_modules的文件夹下,通常对于在本地的文件,按照正常的文件加载方式,应该是下面这种方式。
const moment = require('./node_modules/moment');
但是我们并不会使用这种方式去加载node_modules中的包,而是通过下面的这种方式。
const moment = require('moment');
全局函数require内部做了处理,简化了我们手写路径的痛苦,当传入一个非路径类的字符串时,便会按照目录层级向上的每一层的node_modules中找对应的文件或者文件夹。
通过上面node包的安装过程分析,可以看出来npm安装包的实质则是下载文件进本地的node_modules文件夹下,而且要有一个入口文件来暴露出我们所要提供的方法,当我们要写一个自己的nodejs的包的时候,也需要按这个标准来完成。
二. 写一个自己的node包
1. 功能实现
首先最重要的一步确定自己的包叫什么名字,为了演示我这里的包名叫my_module_for_test,其次确定要实现的功能,实质即封装一个要实现某功能的函数,这里简单实现一个打印参数功能的函数。
// my_module/index.js
function print(name) {
console.log('you enter name is :%s', name);
};
module.exports = print;
在当前目录下新建一个node_modules的文件夹,在新建一个my_module文件夹作为自己的包空间,然后把自己实现的方法放在包空间下的index.js文件里,这时候初始版本的node包便完成了。
2. 发布至NPM源
要完成自己的一个node包,不单单要实现包的功能,还要能够安装,安装的实质在上面提到了,即下载文件,但是下载的前提是要将你的包资源放到远端的镜像下,然后使用中去下载安装至当前目录node_modules文件夹下。
发布一个node包需要进行以下步骤:
1. 注册NPM账号
进入www.npm.js下进行注册自己的账号。
2. npm 登录自己的账户
npm login
3. 在已经完成的my_module文件夹下初始化package.json,初始化完成后,在该文件夹下有package.json文件和index.js两个文件。
npm init //填入包信息
4. 发布包至npm源
npm publish
通过以上四步,你写的node包就成功被发布到了npm源上,所有人都可以通过npm install来使用你的包了。
5. 使用npm install 安装使用
npm install --save my_module_for_test
用上面命令进行安装后,可以在本地node_modules下查看你的包即刚刚上传的包,写一个index.js进行测试。
const print = require('my_module_for_test');
print('welcome you, 请关注公众号:fullStackEngineer');
6. 删除包
当你的包不再使用且不在维护的时候可以使用下面命令删除它。
npm unpublish my_module_for_test --force
以上便是一个完整的node的包发布至npm源的过程。
如上内容均为自己总结,难免会有错误或者认识偏差,如有问题,希望大家留言指正,以免误人。若有什么问题请留言,会尽力回答之。