我正在尝试构建一个实用程序 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) 我正在寻找对我在修补时编码的模式的反馈。
我正在为我的公司创建一个包,该包将公开发布。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,谁知道还有什么/它会如何增长(我不想有构建脚本文件)所以我想:为什么不把它全部提升为一个 monorepo 呢?
树结构将从:
myLib/
package.json ? build + test + publish script
tsconfig.json
jest.config.json
.npmignore ? managing what to …Run Code Online (Sandbox Code Playgroud)