美文网首页
编写自己的node_modules包

编写自己的node_modules包

作者: wn777 | 来源:发表于2024-01-29 22:46 被阅读0次

    背景

    我们做nodejs代码开发过程中,随着代码的不断增多,当不同项目或服务需要引入相同的代码 。如何跨服务,甚至跨项目使用相同代码?
    其中一个方法就是,编写共用的node_modules包,然后在需要的地方作为package.json中的依赖引入。
    在开始之前,简单梳理下我们要做的事情:开发一个”公共依赖包”(下文中我们命名这个包叫:shared_code), 然后 在业务代码里引入这个”公共依赖包”。

    准备环境

    npx: 8.9.0
    node: 18.2.0
    yarn: 1.22.19
    

    开始编写

    我们的node_module包,语言选用ts,写完再编译成js(依赖typescript)

    目录结构

    common :share_code中存放一些model表信息。依赖(@typegoose/typegoose)
    app1 && app2 : 分别依赖使用了share_code中的model表信息。

    ├── app1
    │   ├── index.ts
    │   ├── package.json
    │   └── tsconfig.json
    ├── app2
    │   ├── index.ts
    │   ├── package.json
    │   └── tsconfig.json
    ├── common
    │   ├── index.ts
    │   ├── package.json
    │   ├── src
    │   │   └── model
    │   │       ├── index.ts
    │   │       ├── Team.ts
    │   │       └── User.ts
    │   └── tsconfig.json
    └── README.md
    
    

    代码内容

    common中,这里定义一些公共表结构,然后在index.ts中导出。


    公共表结构 对外部导出
    对外部导出 app1 & app2 中,对于表结构进行引入

    配置文件

    编写package.json,这里我们公共的包中,入口分别指向js入口 和 编译后type的入口。

    {
      "name": "shared_code",
      "version": "1.0.0",
      "main": "index.js",
      "types": "./build/index.d.ts",
      "license": "MIT",
      "dependencies": {
        "@typegoose/typegoose": "^12.1.0",
        "typescript": "5.2.2"
      }
    }
    
    

    编写tsconfig.json,这里直接给例子,对应字段含义写在注释里。
    可以先注意outDir, include, exclude 字段。

    {
        "compilerOptions": {
            "baseUrl": "./", // 基础目录
            "outDir": "./build", // 编译输出目录
            "declaration": true, // TypeScript 会在编译时生成对应的声明文件
            "skipLibCheck": true, // TypeScript 编译器将跳过对引入的声明文件(例如从 node_modules 中导入的库)的类型检查。
            "experimentalDecorators": true, // 允许使用实验性的装饰器语法。
            "lib": ["es2015", "es2016"], // 使用指定标准库进行编译
            "target": "es2017", // 生成 ES(ECMAScript) - 2017版本的代码
            "module": "commonjs", // 指定生成的 JavaScript 代码的模块系统类型
            "composite": true, // 增量编译
            "sourceMap": true, // 用于debug打断点时, 进行代码关联
        },
        "exclude": ["node_modules/**/*", "**/*.d.ts"], // 不编译哪些
        "include": ["./index.ts", "src/**/*"]  // 哪些要编译
    }
    
    

    发包与引入

    发布包

    安装依赖,编译,

    cd common && yarn install && npx tsc 
    

    这里我们先使用yarn link的形式, 发布并本地关联。(refs:https://classic.yarnpkg.com/lang/en/docs/cli/link/)
    (下一章 单独讲下如何发包到仓库 并引入,参考:https://www.jianshu.com/p/5bf288a2d461

    cd common && yarn link
    

    引入包

    // 以app1举例
    cd app1/ // 进入app1目录下
    yarn link shared_code // 链接发布的包
    npx tsc // 编译
    

    至此便完成一个包的发布以及代码中的引入。

    完整代码示例

    https://github.com/Wunan777/my_node_module/tree/main/local_package_demo

    相关文章

      网友评论

          本文标题:编写自己的node_modules包

          本文链接:https://www.haomeiwen.com/subject/mcrnodtx.html