我试图找出如何捆绑我的JS生成的代码从TS文件,我面临着一些问题。我有两个组件,其中一个是扩展另一个。
让我们保持简单。
tsconfig.json
{
"compilerOptions": {
"target": "es2017",
"moduleResolution": "node",
"sourceMap": true,
"baseUrl": "./public",
"outDir": "dist",
"paths": {
"@js/*": ["../dist/public/javascripts/*"]
}
}
}
仅父组件:
const template = document.createElement('template');
template.innerHTML =
`
<style>
</style>
<h1>Parent</h1>
`
export class Parent extends HTMLElement {
constructor() {
super();
this.attachShadow({mode: 'open'});
this.shadowRoot.appendChild(template.content.cloneNode(true));
}
}
window.customElements.define('my-parent', Parent)
和子组件:
import {Parent} from '@js/Parent.js' <- does not work
import {Parent} from './Parent.js' <- works fine
const template = document.createElement('template');
template.innerHTML =
`
<style>
</style>
<h1>Child</h1>
`
class Child extends Parent{
formId = 'adventureNpcs';
constructor() {
super();
this.attachShadow({mode: 'open'});
this.shadowRoot.appendChild(template.content.cloneNode(true));
}
}
window.customElements.define('my-child', Child)
从Map文件(从dist生成的源代码)导入模块后,似乎再也看不到它们之间的继承关系了,结果是:
Property 'attachShadow' does not exist on type 'Child'.
为什么以这种方式导入模块时会识别子模块:
import {Parent} from './Parent.js'
这不管用吗
import {Parent} from '@js/Parent.js'
我错过什么了吗?做错什么了吗?
1条答案
按热度按时间sr4lhrrt1#
与依赖文件位置***和***同步加载不同,您可以依赖
CustomElementsRegistry
您可以将其重构为:
<my-parent>
<my-child>
将被定义***当***<my-parent>
已被定义innerHTML
是臃肿的代码,并且只会对数千个元素产生性能增益。所有显示此内容的旧博客都应该被烧毁。所有未显示super()
的博客也是如此。