我正在开发一个用Typescript编写的Angular 2应用程序,它使用webpack与ts-loader结合在一起。
我非常依赖webpack的resolve.alias来满足不同的构建输出,我遇到了一个问题。
当运行特定的构建时,ts-loader会抛出错误,说它无法找到当前构建中使用的模块。我认为这是由于别名指向不同的文件。
例如: file:myApp.ts
import {Logger} from 'logger';
export class myApp {}
我有两个别名JSON文件,一个设置为指向'记录器'在 remoteSystemLogger.ts ,另一个指向 consoleLogger.ts
现在每个记录器类都将导入它们的相对依赖项。例如:
file:remoteSystemLogger.ts
import {HTTP} from 'http';
export class Logger {}
问题是,当我运行构建B时,我收到一条错误说:
remoteSystemLogger.ts中的错误
错误TS2307:找不到模块' http'。
http以及remoteSystemLogger当前未在Build B的别名JSON文件中指定,因为Build B应该不依赖于它。
用于webpack构建的别名文件是在构建时通过参数确定的。
以下是webpack config
中使用的解析示例let moduleAliasingConfig = `./alias/${buildType}.json`
// ....
resolve: {
root: [
path.resolve('.'),
path.resolve('node_modules')
],
alias: moduleAliasingConfig,
extensions: ['', '.ts', '.js']
},
这是ts-loader配置:
loaders: [
{test: /\.ts$/, loaders: ['ts'], exclude: [/\.(spec|e2e)\.ts$/]}
]
我不确定是否有错误配置的东西,或者这是加载器,webpack解析器的问题,或者只是我对混叠如何工作的理解。
根据我的理解,该webpack将遍历我的导入/依赖树,基于别名文件和我的入口点。
其他环境信息:
package.json setup: