؟ ؟ مساعدون ما قبل المجمع لمكونات الملفات الفردية
يدعم حاليا: .vue ، .svelte ، .astro
؟ ️ الملعب
حزمة تثبيت:
pnpm install sfc-composer import { MagicSFC as MagicVueSFC } from 'sfc-composer/vue'
import { MagicSFC as MagicSvelteSFC } from 'sfc-composer/svelte'
import { MagicSFC as MagicAstroSFC } from 'sfc-composer/astro' MagicSFC<T> هي واجهة الجذر المقدمة ليتم تمديدها بواسطة فئات الأطفال الخاصة بالإطار.
scripts: MagicBlock<T>[]
بالإشارة إلى <script> أو أي سياقات JavaScript/TypeScript من SFCs.
templates: MagicBlock<T>[]
في إشارة إلى أجزاء من SFCs <template> .
styles: MagicBlock<T>[]
في إشارة إلى <style> أجزاء من SFCs.
customs: MagicBlock<T>[]
كتل مخصصة من محلات الأطر التي تدعم تلك الميزة.
getSourcemap(options?: SourceMapOptions): SourceMap
يولد الإصدار 3 sourcemap مثل MagicString .
getTransformResult(): TransformResult
متوافق مع نتيجة الخطاف Vite transform() .
parse(): Promise<MagicSFC>
يستخدم المحلل لتحديث كتل MagicSFC .
يجب تنفيذها من قبل فصول الطفل.
تعرف على المزيد حول جميع الاستخدامات من خلال النظر في الاختبارات!
عند استخدام وظيفة parse ، ستقوم MagicSFC بتقسيم المكون المقدم باستخدام الأدوات الأصلية لـ Framework.
سيتم تقسيم نتيجة التحليل إلى تنسيق قياسي يعترف templates scripts styles .
سيحافظ كل من هذه MagicBlock على الشكل الأصلي من المحلل ، ولكنه سيعرض أيضًا جميع وظائف Magicsstring ذات الصلة.
كل وظيفة من هذه الوظائف ، عند استدعاءها ، ستطبق كل ما لديك على الكتلة المحلية.
يمكنك أيضًا الوصول إلى _loc و _source على كل MagicBlock ، وهي نسخ قياسية من تحديد المواقع والمحتوى.
عند استدعاء result ، ستحصل على code كسلسلة ، وكائن SourceMap المناسب.
انظر إلى التنفيذ.
تصدير الأطر وظيفة createSfc التي تجعل توليد SFCs أسهل برمجيًا.
كلهم يدعمون نفس الدخلات:
import { createSFC as createVueSFC } from 'sfc-composer/vue'
import { createSFC as createSvelteSFC } from 'sfc-composer/svelte'
import { createSFC as createAstroSFC } from 'sfc-composer/astro'
const writeableSFC = {
templates : [
{
content : '<div>Hello World!</div>'
}
] ,
scripts : [
{
content : 'console.log(`Hello World!`)'
}
] ,
styles : [
{
content : 'div { color: red; }'
}
]
}
// Will output a valid Svelte SFC
createSvelteSFC ( writeableSFC )
// Will output a valid Astro SFC
createAstroSFC ( writeableSFC )
// Will output a valid Vue SFC
createVueSFC ( {
... writeableSFC ,
// Vue also natively supports `customs` block in its parser.
customs : [
{
type : 'i18n' ,
content : '{ "fr": "Bonjour!", "en": "Hello!" }' ,
}
]
} ) import { MagicSFC as MagicVueSFC } from 'sfc-composer/vue'
import { parse } from 'vue/compiler-sfc'
async function transformVueSFC ( ) {
const sfc = new MagicVueSFC (
'<template><div>Hello World!</div></template>'
+ '<script setup>let test: string</script>'
+ '<style scoped>div { color: red; }</style>' ,
{
parser : parse
}
)
// Process the SFC code through the parser
await sfc . parse ( )
// Append to the <script> tag
sfc . scripts [ 0 ] . append ( ' = `Hello World`' )
return sfc . result ( )
// {
// code: '<template><div>Hello World!</div></template>nn<script setup>let test: string = `Hello World`</script>nn<style scoped>div { color: red; }</style>'
// map: SourceMap
// }
}تعرف على المزيد من خلال النظر في الاختبارات.
import { createSFC as createVueSFC } from 'sfc-composer/vue'
const MagicVueSFC = createVueSFC ( {
templates : [
{
content : '<div>{{ msg }}</div>' ,
}
] ,
script : [
{
content : 'export default { data() { return { msg: "Hello, world!" } } }'
} ,
{
content : 'const setupMsg = "Hello from setup!"' ,
}
] ,
styles : [
{
lang : 'scss' ,
scoped : true ,
content : '.text { color: red; }' ,
} ,
] ,
} ) <script>
export default { data() { return { msg: "Hello, world!" } }
</script>
<script setup>
const setupMsg = "Hello from setup!"
</script>
<template>
<div>{{ msg }}</div>
</template>
<style scoped lang="scss">
.text { color: red; }
</style>
تعرف على المزيد من خلال النظر في الاختبارات!
import { MagicSFC as MagicSvelteSFC } from 'sfc-composer/svelte'
import { preprocess } from 'svelte/compiler'
async function transformSvelteSFC ( ) {
const sfc = new MagicSvelteSFC (
'<script>let test: string</script>nn'
+ '<div>Hello World!</div>nn'
+ '<style>div { color: red; }</style>' ,
{
parser : preprocess
}
)
// Process the SFC code through the parser
await sfc . parse ( )
// Append to the <script> tag
sfc . scripts [ 0 ] . append ( ' = `Hello World`' )
return sfc . result ( )
// {
// code: '<script>let test: string = `Hello World`</script>nn<div>Hello World!</div>nn<style>div { color: red; }</style>'
// map: SourceMap
// }
}تعرف على المزيد من خلال النظر في الاختبارات!
import { createSFC as createSvelteSFC } from 'sfc-composer/svelte'
const MagicVueSFC = createSvelteSFC ( {
templates : [
{
content : '<div>{msg}</div>' ,
}
] ,
script : [
{
content : 'let test = `Hello World!`;'
}
] ,
styles : [
{
content : '.text { color: red; }' ,
} ,
] ,
} ) <script>
let test = `Hello World!`;
</script>
<script setup>
const setupMsg = "Hello from setup!"
</script>
<div>{msg}</div>
<style>
.text { color: red; }
</style>
تعرف على المزيد من خلال النظر في الاختبارات!
import { MagicSFC as MagicAstroSFC } from 'sfc-composer/astro'
import { preprocess } from '@astrojs/compiler'
async function transformAstroSFC ( ) {
const sfc = new MagicAstroSFC (
'---nlet test: stringn---nn'
+ '<div>Hello World!</div>nn'
+ '<style>div { color: red; }</style>' ,
{
parser : preprocess
}
)
// Process the SFC code through the parser
await sfc . parse ( )
// Append to the <script> tag
sfc . scripts [ 0 ] . append ( 'test = `Hello World`' )
return sfc . result ( )
// {
// code: '---nlet test: stringntest = `Hello World`n---nn<div>Hello World!</div>nn<style>div { color: red; }</style>'
// map: SourceMap
// }
}تعرف على المزيد من خلال النظر في الاختبارات!
import { createSFC as createAstroSFC } from 'sfc-composer/astro'
const MagicVueSFC = createAstroSFC ( {
templates : [
{
content : '<div>{msg}</div>' ,
}
] ,
script : [
{
content : 'let test = `Hello World!`;' ,
attrs : {
frontmatter : true
}
} ,
{
content : 'let secondTest = `Hello World`;'
}
] ,
styles : [
{
content : '.text { color: red; }' ,
} ,
] ,
} ) ---
let test = `Hello World!`;
---
<script>
let secondTest = `Hello World`;
</script>
<div>{msg}</div>
<style>
.text { color: red; }
</style>
تعرف على المزيد من خلال النظر في الاختبارات!
corepack enablepnpm installpnpm dev صنع مع
المنشورة تحت رخصة معهد ماساتشوستس للتكنولوجيا.