【发布时间】:2020-11-12 13:04:28
【问题描述】:
我有以下 tsconfig.json 用于其他包使用的包,我们称之为packageA:
{
"compilerOptions": {
"baseUrl": ".",
"checkJs": false,
"declaration": true,
"downlevelIteration": true,
"esModuleInterop": true,
"outDir": "./dist",
"rootDir": "./src",
"module": "commonjs",
"moduleResolution": "node",
"target": "es5"
},
"include": [
"src/**/*.ts",
"src/**/*.tsx"
],
"exclude": [
"./tests",
"./dist",
"src/**/*.test.ts",
"src/**/*.test.tsx"
]
}
packageA 具有非相对路径,例如
import { T } from 'src/components/Translations';
tsc 将其转换为:
var Translations_1 = require("src/components/Translations").
当我使用消耗 packageA 的 webpack 编译不同的包 (packageB) 时出现问题
我在packageA 的package.json 中有main,如下所示:
"main": "dist/index.js",
"types": "dist/index.d.ts"
index.ts 有这样的出口:
export * from 'src/selectors/ui';
转译成这个
__exportStar(require('src/selectors/ui'), exports);
当我编译 packageB 时,它消耗了 packageA 作为依赖项。
import { selector } from 'packageA;
这将加载node_modules/packageA/dist/index.js
ts-loader 发出以下错误
`找不到模块:'src/selectors/ui'。
问题是来自packageA 的转译代码看起来像这样。
__exportStar(require('src/selectors/ui'), exports);
但dist 文件夹看起来像这样:
|
ui
|
translations
src 在tsconfig.json 中用outDir 指定的dist 目录中不存在
我尝试像这样在 webpack 中添加别名:
alias: {
'webpack/hot/poll': require.resolve('webpack/hot/poll'),
src: 'dist',
},
这实际上确实为packageA 修复了它,但是这打破了packageB 的分辨率,该分辨率也具有非相对导入,例如:
import { App } from 'src/containers'
问题是src 被映射到dist,正如我在 webpack 输出中看到的那样
aliased with mapping 'src': 'dist' to 'dist/containers/App'
当然,我得到了错误
找不到模块:'src/containers/App'
我可以将src 映射到dist 仅针对特定模块而不是所有模块吗?
如果packageA 有相对路径,一切正常。
【问题讨论】:
标签: typescript webpack