如何在不导入“ dist”的情况下在NPM上发布TypeScript模块?

cle*_*lem 7 npm typescript angular

我正在尝试在NPM上发布一个打字稿库,但是发布后我找不到“好的”路径。

在这一点上,我遵循一些指南,但是找不到解决方案。

问题:因此,请考虑以下结构:

dist
 |- Alls files generated after tsc build
lib
 |- All TS files of library (source)
CHANGELOG.md
LICENSE
package.json
README.md
tsconfig.json
Run Code Online (Sandbox Code Playgroud)

发布后,例如在Angular应用程序中,我将键入:

import {Component} from '<library name>/dist/Component';
Run Code Online (Sandbox Code Playgroud)

我的问题:如何配置项目导入到有from '<library name>/Component'代替from '<library name>/dist/Component'吗?

谢谢

cle*_*lem 6

根据@joe-clay的建议,我找到了解决方案。

我的新结构如下:

dist
 |- Alls files generated after tsc build
 |- package.json
 |- LICENSE
 |- README.md
src
 |- All TS files of library (source)
CHANGELOG.md
LICENSE
README.md
tsconfig.json
Run Code Online (Sandbox Code Playgroud)

dist目录通过 NPM 包页面的 README.md 和 LICENSE 文件发布在 NPM 上。

根目录是 Github 上的入口点,其中包含 README.md、LICENSE 和 CHANGELOG.md,用于 Github 上的开发过程。

tsconfig.json放置在根目录中,因为如果位于目录内部,我找不到正确构建的解决方案dist

在 中package.json,我添加了脚本"build": "cd ../ && tsc"以便能够在目录npm run build内执行。dist

通过这种结构,库开发和 NPM 发布工作正常。

我可以从我的应用程序中使用此导入:

import {Component} from '<library name>/Component';
Run Code Online (Sandbox Code Playgroud)

再次感谢你。


wil*_*xmd 5

我找到了一个非常干净的解决方案,不需要将您的 package.json 复制到您的 dist 或从 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)