输入搜索…

· package · 4 min 阅读

创建一个 npm 包

制作一个适用于 Koa 的 npm 包

创建一个 npm 包

@sametomorrow

前期准备工作:

  1. 创建一个 npm 账号,npm-signup
  2. 将你的 npm registries 设置为官方的,推荐使用 nrm

正式开始:

  1. 创建目录 dacong-koa-verifytoken (假设我需要制作一个用于验证 token 的包)

  2. 执行初始化 npm init -y

  3. 安装依赖,npm install jsonwebtoken koa-router

  4. 创建 index.js 文件,此文件为入口文件

        const verifyToken = require('./verifytoken')
    module.exports = { verifyToken }
    
  5. 创建 verifytoken.js 文件,此文件为主要功能文件

        const jwt = require('jsonwebtoken')
    function setRouterOpts(opts) {
      opts = opts || {} 
      /*
      opts 是引用包时,传入的信息
      secret 为签名秘钥
      excludedPaths 为需要排除的路径
      NODE_ENV 为程序运行环境值
      */
      let { secret = 'secret', excludedPaths = [], NODE_ENV = 'production' } = opts
      return async (ctx, next) => {
        if (!excludedPaths.includes(ctx.path) && NODE_ENV === 'production') {
          const token = ctx.request.headers.token
          // 检查请求头中是否包含令牌
          if (!token) {
            ctx.status = 401 // 缺失令牌,返回未经授权状态码
            return
          }
          try {
            const info = jwt.verify(token, secret)
            ctx.user_data = info.data // 此为用户信息,是创建 token 时设置的
          } catch (err) {
            if (err?.message === 'jwt expired') {
              console.error(`Title:Token验证错误-token过期`)
            } else {
              console.error(`Title:Token验证错误\nErr_stack:${err.stack}\n`)
            }
            ctx.status = 401
          }
        }
        await next()
      }
    }
    module.exports = setRouterOpts
    
  6. 添加 .gitignore 文件,添加需要忽略提交的文件

        node_modules
    .gitignore
    *.DS_Store
    logs
    *.log
    package-lock.json
    
  7. 修改 package.json 文件,加入关键词,描述等信息

        {
      "name": "koa-verifytoken",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [
        "token",
        "verifytoken",
        "koa-token",
        "verify-jwt"
      ],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "jsonwebtoken": "^9.0.2",
        "koa-router": "^12.0.0",
      }
    }
    
  8. 创建 README.md 文件,对此包做一个使用说明

        ### 安装
    
    ```shell
    npm install koa-verifytoken@latest
    ```
    
    ### 使用
    
    ```javascript
    /* 🌰 /router.js
    secret:token秘钥 default:'secret'
    excludedPaths:需要排除验证的路由host完整地址 🌰 https://test.cn/api/8888 default:[]
    NODE_ENV:Node的环境,production环境才会执行验证,方便本地开发 default:'production'
    */
    const router = require('koa-router')()
    const { verifyToken } = require('koa-verifytoken')
    
    router.use(verifytoken({secret, excludedPaths, NODE_ENV}))
    router.use('/other') // 其它需要验证的路由
    module.exports = router
    ```
    
    ### 注意事项
    
    1. 这是 `Koa` 的插件
    2. `NODE_ENV``production` 时,才会生效
    3. `excludedPaths` 为一个 `host` 路径数组
    
  9. 确认无误就可以提交了,默认的包名,为 package.json 里面 name 的值,不可重复

  10. 执行 npm publish 提交,根据控制台提示完成登录即可

  11. 这个时候,在 npm 中就可以搜索到此包了

注意:

  1. 实际我已经发布的包名为 dacong-koa-verifytoken koa-verifytoken 只是一个用于教程的名字
  2. 这只是一个非常简单的示例,并没有打包
  3. 请注意教程中依赖包的版本信息,如果依赖包版本有大的变动,可能会不适用
分享:
返回文章列表