webpack - Forhåndskompiler TypeScript Vue-komponenter med malstreng
Jeg har et Vue-nettsted som er bygget med Webpack. Jeg har en TypeScript-fil som inneholder en komponent:
// my-component.ts
import Vue = require('vue');
export default Vue.component("my-component", {
template: "<div>I am a component</div>"
});
Når jeg prøver å bruke denne komponenten får jeg følgende advarsel:
Du bruker runtime-only-versjonen av Vue hvor template-alternativet ikke er tilgjengelig. Enten forhåndskompilerer du malene til render-funksjoner, eller så bruker du versjonen som inkluderer kompilatoren.
Nå: hvordan forhåndskomilerer jeg denne malen? Jeg vet at jeg kan definere en .vue-fil og til og med bruke TypeScript inne i <script></script>, men jeg vil heller definere min komponent i ren TypeScript slik at jeg får god TypeScript-støtte i WebStorm.
Er dette mulig?
(Jeg vet at jeg også kan velge det andre alternativet ved å lage et alias for kompilatoren som er inkludert i bygget på vue/dist/vue.js, men jeg føler at dette gir meg en ytelsesstraff. I det minste legger det til 20kb i bygget mitt.)
Svar #1
Du bør kunne bruke standalone build for å gjøre dette, bare legg til følgende i din webpack-konfigurasjon (dette er for den nyeste Vue-utgivelsen):
resolve: {
alias: {
'vue$': 'vue/dist/vue.common.js'
}
}
Og det bør hente den frittstående versjonen for deg, som inkluderer malalternativet.
Hvis du vil prøve å lage dine egne render-funksjoner, kan du det. På det mest grunnleggende vil du få:
Vue.component('msg', {
functional: true,
render: (createElement, context) => {
return createElement('div', context.props.message)
},
props: ['message']
})
Det er litt mer komplekst, men egentlig ikke så ille hvis du virkelig ikke liker ideen om å bruke .vue-filer og malene dine er relativt enkle, her er fiddle for komponenten ovenfor:
https://jsfiddle.net/et67zqdp/
Det er da verdt å ta en titt på:
https://v2.vuejs.org/v2/guide/render-function.html
Svar #2
Jeg vet ikke om dette er den anbefalte måten eller ikke: Men jeg lager bare en fil i roten av prosjektet (samme sted som din "package.json" ligger) kalt
"vue.config.js"
module.exports = {
runtimeCompiler: true
}
