vue sfc parser
v0.1.2
vue.js單文件組件解析器用於靜態分析。
VUE SFC解析器類似於Vue-Template-Compiler的parseComponent ,但有一些有用的助手用於代碼分析。
const { parseComponent } = require ( 'vue-sfc-parser' )
const code = `
<template>
<p>Hi</p>
</template>
<script lang="ts">
export default {}
</script>
`
const res = parseComponent ( code )
console . log ( res . template . calcGlobalOffset ( 7 ) )
console . log ( res . script . calcGlobalOffset ( 5 ) ) parseComponent(code: string): SFCDescriptor這幾乎與vue-template-compiler的parseComponent相同。 SFCDescriptor看起來如下:
interface SFCDescriptor {
template : SFCBlock | null
script : SFCBlock | null
styles : SFCBlock [ ]
customBlocks : SFCBlock [ ]
} SFCBlock也類似於vue-template-compiler One,但具有其他幫助方法。
calcGlobalOffset(offset: number): number
calcGlobalRange(range: [number, number]): [number, number]
這些方法用於從塊位置計算全局位置。例如:
< docs >Test Docs</ docs >
< template >
< p >Hi</ p >
</ template >在上面的SFC上,如果您提供5 template.calcGlobalOffset ,該calcglobaloffset指示了模板塊的啟動位置,則它將返回38 ,這是文件開始的位置。
createDiffWatcher(): SFCDiffWatcher創建一個觀察器對象,該對象將檢測每個SFC塊的差異。 SFCDiffWatcher具有以下方法:
add(filename: string, content: string): SFCDescriptorremove(filename: string): voiddiff(filename: string, content: string): SFCDiff您可以使用add / remove方法將 /刪除SFC文件添加到觀察者。然後,您可以使用diff方法獲得每個SFC塊的差異。它返回具有一些方法的對象,您可以在更改相應的塊時註冊該方法,該對象可以註冊回調。
例子:
const { createDiffWatcher } = require ( 'vue-sfc-parser' )
const fs = require ( 'fs' )
const chokidar = require ( 'chokidar' )
const watcher = createDiffWatcher ( )
chokidar
. watch ( '**/*.vue' )
. on ( 'add' , filename => {
watcher . add ( filename , fs . readFileSync ( filename , 'utf8' ) )
} )
. on ( 'unlink' , filename => {
watcher . add ( filename )
} )
. on ( 'change' , filename => {
watcher
. diff ( filename , fs . readFileSync ( filename , 'utf8' ) )
. template ( template => {
console . log ( template . content )
} )
. script ( script => {
console . log ( script . content )
} )
. styles ( styles => {
styles . forEach ( s => {
console . log ( s . content )
} )
} )
. customBlocks ( 'block-name' , blocks => {
blocks . forEach ( b => {
console . log ( b . content )
} )
} )
} ) 麻省理工學院