具有多个入口点的 TypeScript 包
TypeScript package with multiple entry points
公开节点包模块的标准方法是将它们列在 index.ts 中,如下所示:
export * from './module1';
export * from './module2';
但是,这会立即加载两个模块的内容。我想要一个未在 index.ts 文件中导出的模块,因为它需要安装一些可选的依赖项。
我遵循了这个指南:https://blog.mozilla.org/data/2021/04/07/this-week-in-glean-publishing-glean-js/
我的package.json:
"exports": {
".": {
"import": "./dist/es/index.js",
"require": "./dist/cjs/index.js"
},
"./module2": {
"import": "./dist/es/module2.js",
"require": "./dist/cjs/module2.js"
}
},
"typesVersions": {
"*": {
".": [
"./dist/types/index.d.ts"
],
"./module2": [
"./dist/types/module2.d.ts"
]
}
},
// fallback for older Node versions:
"module": "dist/es/index.js",
"main": "dist/cjs/index.js",
"types": "dist/types/index.d.ts",
在我构建项目(使用 tsc
,分别用于 CJS 和 ESM)之后,输出目录结构如下所示:
- dist
- cjs
- index.js
- module2.js
- es
- index.js
- module2.js
- types
- index.d.ts
- module2.d.ts
但是,当我发布这个包并在客户端项目中安装它时,module2 不起作用。
import {sayHello} from 'ts-exports-test';
import {sayGoodbye} from 'ts-exports-test/module2';
console.log(sayHello());
console.log(sayGoodbye());
我 运行 它与 ts-node
并且我收到错误:
src/index.ts:2:26 - error TS2307: Cannot find module 'ts-exports-test/module2' or its corresponding type declarations.
注意:对于使用 TS 4.5 的客户端,可以在“导出”部分中声明类型路径,从而无需“typesVersions”破解。但这是为了未来。
如果您像这样在 typesVersions 中定义路径,它会起作用:
"typesVersions": {
"*": {
"*": [
"dist/types/index.d.ts"
],
"module2": [
"dist/types/module2.d.ts"
]
}
}
不确定它遵循什么约定,但看起来 .
或 ./
之类的路径无效。
公开节点包模块的标准方法是将它们列在 index.ts 中,如下所示:
export * from './module1';
export * from './module2';
但是,这会立即加载两个模块的内容。我想要一个未在 index.ts 文件中导出的模块,因为它需要安装一些可选的依赖项。
我遵循了这个指南:https://blog.mozilla.org/data/2021/04/07/this-week-in-glean-publishing-glean-js/
我的package.json:
"exports": {
".": {
"import": "./dist/es/index.js",
"require": "./dist/cjs/index.js"
},
"./module2": {
"import": "./dist/es/module2.js",
"require": "./dist/cjs/module2.js"
}
},
"typesVersions": {
"*": {
".": [
"./dist/types/index.d.ts"
],
"./module2": [
"./dist/types/module2.d.ts"
]
}
},
// fallback for older Node versions:
"module": "dist/es/index.js",
"main": "dist/cjs/index.js",
"types": "dist/types/index.d.ts",
在我构建项目(使用 tsc
,分别用于 CJS 和 ESM)之后,输出目录结构如下所示:
- dist
- cjs
- index.js
- module2.js
- es
- index.js
- module2.js
- types
- index.d.ts
- module2.d.ts
但是,当我发布这个包并在客户端项目中安装它时,module2 不起作用。
import {sayHello} from 'ts-exports-test';
import {sayGoodbye} from 'ts-exports-test/module2';
console.log(sayHello());
console.log(sayGoodbye());
我 运行 它与 ts-node
并且我收到错误:
src/index.ts:2:26 - error TS2307: Cannot find module 'ts-exports-test/module2' or its corresponding type declarations.
注意:对于使用 TS 4.5 的客户端,可以在“导出”部分中声明类型路径,从而无需“typesVersions”破解。但这是为了未来。
如果您像这样在 typesVersions 中定义路径,它会起作用:
"typesVersions": {
"*": {
"*": [
"dist/types/index.d.ts"
],
"module2": [
"dist/types/module2.d.ts"
]
}
}
不确定它遵循什么约定,但看起来 .
或 ./
之类的路径无效。