likes
comments
collection
share

nodeJS 开发自己的专属包 npm 第三方模块

作者站长头像
站长
· 阅读数 11

前言

在往期文章,我们介绍了自定义模块第三方模块(包),以及npm

对于自定义模块只是简单的编写函数 exports导出供其他模块使用

那么有没有办法,让自己编写的模块,像第三方模块那样高大上,可以npm下载使用

答案是肯定的

正文

包规范 铺垫

回顾往期的npm教学可以知道,

在我们进行npm安装第三方模块的时候,npm会在目录下自动生成一些文件:

nodeJS 开发自己的专属包 npm 第三方模块

其中:

  • node_modules文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包。

  • packge-lock.json配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。

npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些配置 信息。例如:

  • 项目的名称、版本号、描述等
  • 项目中都用到了哪些包
  • 哪些包只在开发期间会用到
  • 那些包在开发和部署时都需要用到

故要编写一个通用的第三方模块,必须也要拥有这些标准文件

规范的包结构

一个规范的包,它的组成结构,必须符合以下 3 点要求:

  • ① 包必须以单独的目录而存在
  • ② 包的顶级目录下要必须包含 package.json 这个包管理配置文件
  • ③ package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口。

初始化包结构

npm 包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建 package.json 这个包管理 配置文件。

npm init -y

注意事项:

  • 上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。
  • 运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到 package.json 中

nodeJS 开发自己的专属包 npm 第三方模块

这个时候,我们也可以继续npm安装别人的第三方模块,比如moment

npm install moment

nodeJS 开发自己的专属包 npm 第三方模块

安装完成后,对比原来的package.json可以发现多了一些东西

这里我做一些讲解:

{
  // 自己开发的第三方模块的包名
  "name": "diypackage", 
  // 版本号
  "version": "1.0.0",
  // 对本包的功能做一个简单的描述,后面可以在npmjs官网供使用者了解
  "description": "我是一个超酷的diy包呀",
  // 本包的入口,可以在package.json自己创建一个index.js文件编写代码
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  // 关键词
  "keywords": [],
  // 作者
  "author": "kk",
  // 所遵守的开源协议
  "license": "ISC",
  // 依赖:专门用来记录您使用 npm install 命令安装了哪些包
  "dependencies": {
    "moment": "^2.29.4"
  }
  // 开发时依赖
  "devDependencies": {
  }
}

这里面的

  • dependencies 来自 npm install xxx 命令

  • devDependencies 来自 npm install xxx --dev-save 命令

  • 如果某些包在开发和项目上线之后都需要用到,就用dependencies

  • 如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,就用devDependencies

编写自己包的代码

我们已经初始化好了包结构,也导入了需要的第三方模块

那么就基于这个编写一个自己的包吧

首先,新建一个index.js文件,毕竟我们的package.json里面的main入口就是index.js

const moment = require('moment')

function baoyou (name) {
console.log("北京时间:"+ moment().format('YYYY-MM-DD HH:mm:ss') +" 佛祖为"+name+"的代码加持")
console.log(" ......................阿弥陀佛......................\n"+
"                       _oo0oo_                      \n"+
"                      o8888888o                     \n"+
"                      88\" . \"88                     \n"+
"                      (| -_- |)                     \n"+
"                      0\\  =  /0                     \n"+
"                   ___/‘---’\\___                   \n"+
"                  .' \\|       |/ '.                 \n"+
"                 / \\\\|||  :  |||// \\                \n"+
"                / _||||| -卍-|||||_ \\               \n"+
"               |   | \\\\\\  -  /// |   |              \n"+
"               | \\_|  ''\\---/''  |_/ |              \n"+
"               \\  .-\\__  '-'  ___/-. /              \n"+
"             ___'. .'  /--.--\\  '. .'___            \n"+
"         .\"\" ‘<  ‘.___\\_<|>_/___.’>’ \"\".          \n"+
"       | | :  ‘- \\‘.;‘\\ _ /’;.’/ - ’ : | |        \n"+
"         \\  \\ ‘_.   \\_ __\\ /__ _/   .-’ /  /        \n"+
"    =====‘-.____‘.___ \\_____/___.-’___.-’=====     \n"+
"                       ‘=---=’                      \n"+
"                                                    \n"+
"....................佛祖保佑 ,永无BUG...................")
console.log("北京时间:"+ moment().format('YYYY-MM-DD HH:mm:ss') +" 佛祖为"+name+"的代码加持")
}

module.export = {
    baoyou
}

nodeJS 开发自己的专属包 npm 第三方模块

嘿嘿,很有意思吧

我们是专业的

为了使得我们的包 看起来更加专业

我们再在目录下创建一个 README.md 文件

专业的包都这么搞,一个readme文件,使用markdown语法编写,内容随意

nodeJS 开发自己的专属包 npm 第三方模块

上传npmjs官网

到此,我们的diy包便编写好了。

这时就可以上传npmjs官网了,

当然啦,像我们这种垃圾代码最好还是不要上传去浪费人家网站服务器的空间。

不过,这里还是介绍一下如何上传自己的包

首先,我们需要在npmjs官网去注册一个账号

传送门:

  • 访问 npmjs 网站,传送门npmjs
  • 点击 sign up 按钮,进入注册用户界面
  • 填写账号相关的信息:Full Name、Public Email、Username、Password
  • 点击 Create an Account 按钮,注册账号 ④ 登录邮箱,点击验证链接,进行账号的验证

nodeJS 开发自己的专属包 npm 第三方模块

注册完成后

可以在终端中执行

npm login 

依次输入用户名、密码、邮箱后,即可登录成功。

将终端切换到包的根目录之后,运行

npm publish 

即可将包发布到 npm 上,当然 这里要注意一下包名不可重复

如何查看包名重复也很简单,可以直接到npmjs官网去搜索一下这个包名,没有就是不重复

删除发布的包

运行

npm unpublish 包名 --force 

即可从 npm 删除已发布的包。