Как исправить `Конструктор класса LitElement не может быть вызван без 'new'`? - PullRequest
0 голосов
/ 27 декабря 2018

Я настраиваю новый проект, используя освещенный элемент из полимера, а в сборку входит использование участка.Я также использую машинопись для написания своего кода.

Я начал с инициализации npm и добавил все необходимые зависимости:

"dependencies": {
  "@polymer/lit-element": "^0.6.5",
  "@webcomponents/webcomponentsjs": "^2.2.1"
},
"devDependencies": {
  "parcel-bundler": "^1.11.0",
  "tslib": "^1.9.3",
  "typescript": "^3.2.2"
}

Теперь, когда я запускаю посылку, начинается с index.html, которыйвключает в себя:

@webcomponents/webcomponentsjs/webcomponents-bundle.js

Я получаю сообщение об ошибке:

Class constructor LitElement cannot be invoked without 'new'

Основываясь на других предложениях, я попытался установить для цели tsconfig значение "es2016", но это не устраняет ошибку.

my-element.ts

import { 
  LitElement,
  html,
  customElement,
  property 
} from '@polymer/lit-element'

@customElement('ui-text')
export class UiText extends LitElement {
  render() {
    return html`<p>Hi</p>`
  }
}

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

После некоторой борьбы с ним, похоже, что у участка (по состоянию на v1.12.3) есть проблема, когда он не рассматривает список браузеров, если index.html не находится в той же папке, что и packages.json, package-lock.jsonnode_modules.После того, как я реорганизовал свои исходные файлы и добавил "browserslist": ["Chrome > 46"], он начал работать нормально.

0 голосов
/ 10 июня 2019

Если я правильно понимаю Parcel, он всегда скомпилирует ваш JS до es5, и в этом случае вам придется поставить адаптер es5 https://github.com/webcomponents/webcomponentsjs#custom-elements-es5-adapterjs, который позволяет коду претендовать на выполнение в качестве необходимых классовзарегистрировать фактический пользовательский элемент с customElements.define().

0 голосов
/ 03 апреля 2019

Создайте файл .browserslistrc с:

last 1 chrome versions

и убедитесь, что кэш посылок очищен.Рекомендую запустить посылку с флагом:

parcel entryPoint --no-cache

Подробнее .

...