我正在开发一个用 Typescript 编写的 Angular 2 应用程序,它使用 webpack 和 ts-loader 将所有东西捆绑在一起。
我严重依赖 webpack 的 resolve.alias 来满足不同的构建输出,我遇到了一个问题。
运行特定构建时,ts-loader 会抛出一个错误,指出它找不到当前构建中使用的模块。我认为这是由于别名指向不同的文件。
例如: 文件:myApp.ts
import {Logger} from 'logger';
export class myApp {}
我有两个别名 JSON 文件,一个设置为指向 remoteSystemLogger.ts 的“记录器” ,另一个指向consoleLogger.ts
- 构建 A 将使用 remoteSystemLogger,
- 构建 B 将使用 consoleLogger
现在每个记录器类都将导入它们的相关依赖项。例如:
文件:remoteSystemLogger.ts
import {HTTP} from 'http';
export class Logger {}
问题是,当我运行构建 B 时,我收到一条错误消息:
remoteSystemLogger.ts 中的错误
错误 TS2307:找不到模块“http”。
http 和 remoteSystemLogger 目前没有在 Build B 的别名 JSON 文件中指定,因为 Build B 不应该依赖它。
用于 webpack 构建的别名文件是在构建时通过参数确定的。
这是 webpack 配置中使用的解析示例
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 设置:
- "ts-loader": "^1.2.1",
- “webpack”:“^1.13.0”