打字稿 npm 包 - 如何不必从“dist/”导入

Phi*_*ann 10 npm typescript tsconfig package.json

我正在尝试构建一个实用程序 npm 包。在我的src目录中,我有一堆声明多个接口/类型的打字稿文件。例如在src/value-updatable.ts我有:

export interface UnaryValueUpdatable<T> {
  value: T;
  onChange: (value: T) => void;
}
Run Code Online (Sandbox Code Playgroud)

我将整个源代码编译为dist/,因为它是一个实用程序包,没有入口或主文件,我只想在其他项目中使用这些类型。我什至不确定是否需要编译,但问题仍然相同。当我在不同的项目中安装包时,我必须从dist/orsrc/而不是从包名本身导入。

例如:

import {UnaryValueUpdatable} from "my-utility-package/dist/UnaryValueUpdatable"

我必须如何配置我的包以公开这样的“漂亮”路径:import {whatever} from "my-utility-package/whatever"

包.json:

{
  "name": "my-utility-package",
  "version": "1.0.0",
  "files": [
    "dist/**/*"
  ],
  "scripts": {
    "build": "tsc"
  },
  "license": "MIT",
  "dependencies": {
    "typescript": "^3.6.4"
  }
}
Run Code Online (Sandbox Code Playgroud)

配置:

{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "skipLibCheck": true,
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "module": "commonjs",
    "outDir": "dist",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "declaration": true,
    "jsx": "react"
  },
  "include": ["src"],
  "exclude": ["dist"]
}
Run Code Online (Sandbox Code Playgroud)

wil*_*xmd 3

您可以在项目根目录中创建目录,其中包含package.jsons指向您要在dist.

您可以将您的项目构建为:

package.json (for entire project)
src
 | secondary-package-name
   |- index.ts
secondary-package-name
 |- package.json (for secondary-module-name)
dist
 |- generated files

Run Code Online (Sandbox Code Playgroud)

辅助模块的 package.json 只需包含

{
  "name": "package/secondary-package-name",
  "private": true,
  "main": "../dist/secondary-package-name/index.js"
}

Run Code Online (Sandbox Code Playgroud)

指向你的dist

然后,您应该能够引用辅助包的导出,如下所示:

import { someFn } from "package/secondary-package-name"
Run Code Online (Sandbox Code Playgroud)

前提是它是从该目录中的 index.ts 文件导出的

您还需要确保files主 package.json 的字段包含新目录:

"files": [
  "dist",
  "secondary-package-name"
],
Run Code Online (Sandbox Code Playgroud)

(最初回答于/sf/answers/4373768661/


归档时间:

查看次数:

1668 次

最近记录:

5 年,8 月 前