webpack - Polymer 3 + Webpack -> 没有 'new' 就无法调用 PolymerElement

标签 webpack polymer babeljs polymer-3.x

我正在测试 Polymer 3.0 预览代码,并希望使用 Webpack 和 Babel 设置一个简单的项目,将其转换回 ES5。

编译工作正常。我将 custom-elements-es5-adapter.js 添加到我的演示页面,但捆绑代码执行时出现以下错误:

custom-component.js:13 Uncaught TypeError: Class constructor PolymerElement cannot be invoked without 'new'
    at HTMLElement.CustomComponent (custom-component.js:13)
    at new j (custom-elements-es5-adapter.js:4)
    at CustomElementRegistry.value (custom-elements-es5-adapter.js:4)
    at Object.defineProperty.value (custom-component.js:23)
    at __webpack_require__ (bootstrap 6c5b87648fe743e36ebc:19)
    at window.JSCompiler_renameProperty (bootstrap 6c5b87648fe743e36ebc:62)
    at bootstrap 6c5b87648fe743e36ebc:62

ES6 代码取自这里:https://www.polymer-project.org/blog/2017-08-23-hands-on-30-preview

import {Element as PolymerElement} from '@polymer/polymer/polymer-element';

export class CustomComponent extends PolymerElement {
    static get template() {
        return `<div>This is my [[name]] app.</div>`
    }

    constructor() {
        super();
        this.name = '3.0 preview';
    }

    static get properties() {
        name: {
            Type: String
        }
    }
}

customElements.define('custom-component', CustomComponent);

webpack.config.js

const {resolve} = require('path');

module.exports = {
    context: resolve(__dirname, 'src'),
    entry: {
        "custom-component": './custom-component.js'
    },
    output: {
        filename: '[name].js',
        path: resolve(__dirname, 'dist'),
    },
    resolve: {
        extensions: ['.js']
    },
    devtool: 'source-map',
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /(node_modules|bower_components)/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['@babel/preset-env']
                    }
                }
            }
        ]
    }
};

您可以在我的 Github Repo 中找到代码以便快速查看:https://github.com/janrembold/webcomponent-examples/tree/master/06-frameworks/04-polymer

是否只是因为 Polymer3 的早期状态而出现此错误?或者我在这里错过了什么?

顺便说一句,我不想​​使用polymer-cli,因为我们的项目有一些特殊的要求。

在此先感谢您的帮助!

最佳答案

我遇到了同样的问题: 我通过对支持原生自定义元素(safari 和 chrome)的浏览器使用 babel-plugin-syntax-dynamic-import 解决了这个问题。 并使用 babel-plugin-dynamic-import-webpack 进行转译。

没有转译: 插件:['syntax-dynamic-import']

转译: 插件:['dynamic-import-webpack']

关于webpack - Polymer 3 + Webpack -> 没有 'new' 就无法调用 PolymerElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49160200/

相关文章:

node.js - 在heroku上部署Nodejs+Express+React+Webpack应用程序

css - 强制 Angular cli gz 生成

javascript - 动态更改使用 Polymer 构建的应用程序样式的最佳方法是什么?

node.js - 无法解析 'babel-loader'

javascript - 尽管预设了 ES2015,Webpack 仍输出 ES6 代码

javascript - 动态导入不适用于组合的 CRA 和 SSR

css - Webpack 不会将 CSS 与 ExtractTextPlugin bundle 在一起

javascript - 如何在不捆绑的情况下将为 AMD 编写的代码重写/重新打包为 CommonJs?

javascript - Polymer dom-if if 后面是什么?

javascript - Polymer - 通过纸张复选框显示/隐藏 div