You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用polymer-webpack-loader导入并转译Polymer .html模板?

解决Polymer 3 + Webpack中模板绑定不生效的问题

我明白你遇到的困扰了——把模板放在单独HTML文件通过webpack导入时,Polymer的[[colour]]和[[name]]绑定表达式完全没被解析,直接原样输出,但把模板写在JS里就正常工作。这其实是对polymer-webpack-loader的用法理解有偏差,咱们一步步来解决:

问题根源

当你用html(${view})这种写法时,是把导入的HTML字符串作为普通动态字符串传给了Polymer的html标签函数。但Polymer的html函数依赖ES6模板字面量的静态结构来识别绑定表达式,动态拼接的字符串它没法做静态分析,所以绑定直接失效,只能显示原始的[[...]]语法。

而polymer-webpack-loader的核心作用,就是帮你把单独的HTML文件转换成Polymer能直接识别的模板对象,不需要你再手动用html()去包裹处理。

解决方案

修改你的index.js文件,调整导入和模板返回逻辑:

import { PolymerElement } from '@polymer/polymer';
// 直接导入模板,无需使用* as view的形式
import view from './template.html';

export class NpsWidget extends PolymerElement {
  static get is() { return 'nps-widget'; }

  static get template() {
    // 直接返回导入的view,不需要再用html()包裹
    return view;
  }

  constructor() {
    super();
    this.name = 'Polymer 3.0 test';
    console.log(this.name + ' constructor run successfully.');
  }

  static get properties() {
    return {
      name: { type: String },
      colour: { type: String, value: '#777777' }
    };
  }
}

customElements.define(NpsWidget.is, NpsWidget);

额外配置检查

确保你的webpack配置里的loader顺序正确:

{
  test: /\.html$/,
  use: [
    // 链式loader是从后往前执行,先由polymer-webpack-loader处理HTML,再用babel-loader转译结果
    { loader: 'babel-loader' },
    { loader: 'polymer-webpack-loader' }
  ]
}

你当前的配置已经符合这个要求——polymer-webpack-loader先把HTML转换成JS模块,再由babel-loader处理成兼容目标浏览器的代码,这个顺序没问题。

这样修改后重新打包,模板里的绑定表达式应该就能正常解析,输出你期望的This is my chosen colour: #777777 (Made by the Polymer 3.0 test app)了。

内容的提问来源于stack exchange,提问作者Paul M Sorauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:11:14