【问题标题】:Javascript: Webpack+Typescript+Namespace (internal module)Javascript:Webpack+Typescript+Namespace(内部模块)
【发布时间】:2016-08-22 01:21:38
【问题描述】:

我们正在尝试使用 Webpack 编译 typescript 代码,我们将“模块”(现在定义为外部模块)替换为命名空间(定义为内部模块)。

此更改主要是为了符合 typescript 的建议,并确保在 Karma 上运行基于 Jasmine 的单元测试不需要对“require”的依赖。 Karma-typescript 预处理器已配置好,测试用例运行良好,无需“require”。

对命名空间的更改导致我们删除了对 require 的依赖,这在通过 tsc 进行单元测试和代码编译时效果很好。但是在使用 typescript loader 通过 Webpack 编译时(我尝试过 ts-loader、Webpack-typescript),输出只包含入口 ts 文件的代码,而不是它的依赖项。 Tsc 已经有一个选项 (--outFile) 可以将输出连接到一个文件中,但是两个加载器都不使用它。

有没有办法(加载器或加载器的配置)来解决依赖并将其捆绑到Webpack生成的单个输出js中?

【问题讨论】:

  • 今天,正确的方法是使用 ES6 模块(导入/导出语法)。然后,您可以配置 TypeScript 以生成 CommonJS 语法。这应该可以帮助你使用 Webpack 和 Jasmine。
  • 导入/导出语法被转换为 require 调用,这导致我们在 karma 中有 requirejs 依赖。我试图避免这种情况,并根据手册http://www.typescriptlang.org/docs/handbook/namespaces.html 中的更新使用命名空间。这种理解正确吗?

标签: javascript typescript webpack typescript1.8


【解决方案1】:

此更改主要是为了符合 typescript 的建议,并确保在 Karma 上运行基于 Jasmine 的单元测试不需要对“require”的依赖

您不需要这样做。您应该在任何地方使用 --module:commonjs 并将 bundle 用于前端 + 保持原样用于使用节点运行测试(节点本身理解 commonjs)。

示例

我用 alm https://github.com/alm-tools/alm/ 做这个

【讨论】:

  • 这样做我仍然会为那些不是外部模块的代码片段使用模块。我们试图避免这种情况,而是使用命名空间。 commonJs不会添加对require的依赖吗?
猜你喜欢
  • 2017-10-17
  • 1970-01-01
  • 2020-02-04
  • 2014-04-05
  • 2014-10-05
  • 1970-01-01
  • 2022-10-04
  • 2012-10-02
  • 1970-01-01
相关资源
最近更新 更多