typescript npm软件包-如何不必从“ dist /”导入

时间:2019-10-25 07:50:04

标签: typescript npm package.json tsconfig

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

export interface UnaryValueUpdatable<T> {
  value: T;
  onChange: (value: T) => void;
}

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

例如:

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

我如何配置我的程序包以暴露像这样的“漂亮”路径:import {whatever} from "my-utility-package/whatever"

package.json:

{
  "name": "my-utility-package",
  "version": "1.0.0",
  "files": [
    "dist/**/*"
  ],
  "scripts": {
    "build": "tsc"
  },
  "license": "MIT",
  "dependencies": {
    "typescript": "^3.6.4"
  }
}

tsconfig:

{
  "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"]
}

1 个答案:

答案 0 :(得分:0)

您可以在项目根目录中创建包含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

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

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

指向您的dist

然后您应该能够像这样从辅助包中引用导出:

import { someFn } from "package/secondary-package-name"

只要它是从该目录中的index.ts文件导出的

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

"files": [
  "dist",
  "secondary-package-name"
],

(最初在https://stackoverflow.com/a/62482409/5574183中回答)