javascript - webpack2 使用 knockout 模板进行 tree-shaking

标签 javascript typescript knockout.js webpack webpack-2

我正在使用 webpack 来捆绑我的 typescript 项目,并使用 Knockout 作为我的模板引擎。

现在,当我构建生产项目时,它停止工作 - knockout 模板提示未定义属性。

我怀疑 webpack2 的 tree-shaking 算法正在删除该属性,因为它没有在任何 typescript 代码中使用,而仅在 knockout data-bind 字符串中使用。

有没有办法告诉 webpack 始终包含某个属性,即使它认为它没有被使用?

最佳答案

我对 webpack 不太熟悉,但我在使用 google 闭包编译器时遇到了同样的问题。它将删除仅在数据绑定(bind)中使用的属性并混淆其他属性......

对我有用的解决方案方向是 knockout 本身也在其源中使用的方向:ko.exportProperty

它的使用方式如下:

var VM = function() {
  this.somePropOnlyUsedInView = "Hello world";

  ko.exportProperty(this, "somePropOnlyUsedInView", this.somePropOnlyUsedInView);
}

该方法做了两件事:

  • 它使用 obj["string"] 表示法来强制属性名称
  • 它实际上引用了该属性,使缩小器认为它已被使用且无法删除。

请告诉我这个实用程序是否也适用于您基于 webpack 的构建过程,我很想知道。

关于javascript - webpack2 使用 knockout 模板进行 tree-shaking,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180372/

相关文章:

javascript - 如何使用 JavaScript 记录人们在文本框中键入的内容?

angular - 'string | null' 类型的参数不可分配给 'string' 类型的参数。类型 'null' 不可分配给类型 'string'

javascript - 在 Knockout.js 中,如何在映射后根据复选框字段对 viewModel 项目进行排序

html - 需要在html中发送 bool 值

javascript - 具有动态嵌套键的对象

javascript - 在 QTP 中评估 JavaScript

javascript - 如何允许用户在显示照片滑动库时单击链接?

reactjs - 将 React.lazy 与 TypeScript 结合使用

typescript - 从另一个类型的值中的类型构造一个类型

javascript - 如何在 ASP.NET MVC5 中正确包含 jQuery 和 knockout.js