NestJS 创建可重用/可发布库

Jon*_*nas 4 nestjs

我想创建一个 Nest.js 包,这样我就可以在多个 Nest.js 项目中重用一个控制器。

我已经签出库,但这似乎不是我想要的,因为似乎只能在 repo 中导入库。

拥有可以通过 npm 发布的库以便我可以在其他 Nest 项目中安装和导入它的最佳方法是什么?

You*_*uba 6

最好的方法之一是创建动态模块。
本主题将帮助您单击此处
对于通过 npm 发布它,本文将指导您以清晰的方式进行发布 使用 npm 发布 NestJS 包


Jon*_*nas 5

这就是我最终这样做的方式

  1. 创建文件夹并初始化节点包
    mkdir PACKAGE_NAME
    cd PACKAGE_NAME
    npm init    // Follow the steps to initialize npm package 
Run Code Online (Sandbox Code Playgroud)
  1. 安装以下依赖项和开发依赖项
    npm install @nest/common rxjs reflect-metadata
    npm install -d @types/node rimraf typescript
Run Code Online (Sandbox Code Playgroud)
  1. 然后转到您的package.json并更改/添加main, types,scripts到以下内容
    "main": "dist/index.js",
    "types": "dist/index.d.ts",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "rimraf dist && tsc",
        "prepublish": "npm run build"
    },
Run Code Online (Sandbox Code Playgroud)
  1. npm install

  2. tsconfig.json在您的文件夹中创建文件

  3. 将以下代码添加到 tsconfig.json

    "compilerOptions": {
        "experimentalDecorators": true,
        "target": "es2017",
        "module": "commonjs",
        "lib": ["es2017", "es7", "es6"],
        "declaration": true,
        "declarationMap": true,
        "sourceMap": true,
        "outDir": "./dist",
        "rootDir": "./src",
        "strict": true,
        "noImplicitAny": false,
        "strictNullChecks": false,
        "allowSyntheticDefaultImports": true,
        "esModuleInterop": true,
        "emitDecoratorMetadata": true
    },
    "exclude": [
            "node_modules",
            "dist"
        ]
    }
Run Code Online (Sandbox Code Playgroud)
  1. 创建src文件夹。在此文件夹中添加您的 Nest 代码。

  2. index.ts在您的src文件夹中添加一个文件。在此文件中,您导出您要在此包之外使用的 Nest 代码。例如:

    import { CpuUtilizationModule } from "./cpu-utilization-observer.module";
    import { CpuUtilizationService } from "./cpu-utilization.service";

    export { CpuUtilizationModule, CpuUtilizationService }
Run Code Online (Sandbox Code Playgroud)

这会导出一个模块和一个服务,您可以在 Nest 项目中导入/提供

  1. 运行npm run build。这会将您的代码编译到dist文件夹中。

现在您可以使用npm i PATH_TO_PACKAGE.

  • @nest/common 库不存在,并且在第 4 点与 @nestjs/common 不起作用 (2认同)