1

我正在开发一个用 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”
4

0 回答 0