相关疑难解决方法(0)

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

我正在尝试构建一个实用程序 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, …
Run Code Online (Sandbox Code Playgroud)

npm typescript tsconfig package.json

10
推荐指数
1
解决办法
1668
查看次数

在 npm 上创建一个可用的库...使用纱线工作区

我正在寻找对我在修补时编码的模式的反馈

语境

我正在为我的公司创建一个包,该包将公开发布。DX(开发者体验)对我们来说是最重要的,为此我选择了开发的最新趋势:Typescript、esm 等......我想提出多个模块并使导入易于使用,类似到(例如)nextjs 的next/Router.

[编辑]我发现了这个线程并交叉引用以供曝光。

第一步

我从一个简单的单个包开始我的第一次尝试,tsconfig 和 src/、tests/ 和 dist/ 文件夹。那里没有什么令人难以置信的异国情调,但如果你一直这样做,你就会知道发布它会导致你的导入路径dist稍后包含。

可以使用 package.json 的main字段解决此问题,但这仅适用于顶级模块;您可以使用exports,但它不适用于 Typescript。最简单的解决方法是cp package.json dist/ && npm publish dist/,到此,问题就解决了。

然后我想为了测试这个,我将成为npm link我的 dist/ 文件夹,虚拟地创建“一个包中的包”,几乎没有问题:

  • 这部cp package.json dist/分会增长*.md,谁知道还有什么/它会如何增长(我不想有构建脚本文件)
  • 我仍然需要构建一个测试应用程序来在 DX 级别测试我的库,以及在哪里托管它?

所以我想:为什么不把它全部提升为一个 monorepo 呢?

转折点

树结构将从:

myLib/
  package.json ? build + test + publish script
  tsconfig.json
  jest.config.json
  .npmignore ? managing what to …
Run Code Online (Sandbox Code Playgroud)

npm typescript monorepo yarnpkg yarn-workspaces

5
推荐指数
0
解决办法
606
查看次数