教你从零写一个nodejs包,然后发布至npm源上

随着前端技术发展,现在的前端体系基本离不开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源的过程。

如上内容均为自己总结,难免会有错误或者认识偏差,如有问题,希望大家留言指正,以免误人。若有什么问题请留言,会尽力回答之。

本文分享自微信公众号 - 全栈者(fullStackEngineer)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏达达前端

Day17:web前端开发面试题

Undefined 在 JavaScript 中,没有值的变量,其值是 undefined。typeof 也返回 undefined。

8210
来自专栏女程序员的日常_Lin

Vue SSR

vue.js是构建客户端应用程序的框架,在默认情况下,在浏览器输出Vue组件,进行生成DOM和操作DOM。Vue SSR 就是实现将组件渲染为服务器端的HTML...

79510
来自专栏达达前端

PHP全栈学习笔记33

javascript能做什么? 语句与注解,标识符,字面量,变量命名规范 JavaScript中的数据类型,其它类型如何转为数据型,操作符

7320
来自专栏前端达人

10个流行的JavaScript面试题

JS 初学者总是对 this 关键字感到困惑,因为与其他现代编程语言相比,JS 中的这 this关键字有点棘手。“this” 一般是表示当前所在的对象,但是事情...

8010
来自专栏web前端教室

如何破解前端工程师的局限性

2、全栈开发,就是会前端的,也会后端的技术。要求是全能,就是从前到后一把梭了。但是实践证明,这种全栈开发,一般到后来就是全都会,但全都不精通。

9120
来自专栏天马行空布鲁斯

那些年用过的开源项目(一)

近期微软收购github新闻热搜各大媒体,微软,曾经开源的极力反对者,近几年也是积极拥抱开源。我司近来也是积极的拥抱开源,贡献了包括ui5,cloudfoudr...

9410
来自专栏天马行空布鲁斯

关于时间的那些事 - 中国也曾实行过夏令时,你知道吗?

大家都知道,地球上按照经度分成24个时区,每个时区相差一个小时。一般来说每个国家法定的时间都对应一个时区,比如中国用的东八区时间,韩国用的东九区时间,韩国时间比...

23840
来自专栏天马行空布鲁斯

关于html的input元素,property和attribute的区别

之前在项目中遇到一个很tricky的关于html的input元素的问题,个人觉得挺有意思,于是记录下来。这个问题也是在ui的自动化测试中,可能会碰到的一个问题。

16710
来自专栏浊酒清味

Nature《自然》| 美国航天局真的能在2024年前让人类重返月球吗?

Donald Trump wants US astronauts back on the Moon. But his ambitious plan faces ...

14120
来自专栏较真的前端

手写源码系列(二)——Promise相关方法

本文首发于知乎专栏——前端面试题汇总,大家可以通过文章底部的阅读原来来访问原文地址

14230

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励