@vrx-volar/tsc
v0.3.1
Published
> 该包处于实验阶段,不建议直接使用在生产环境
Downloads
122
Readme
@vrx-volar/tsc
该包处于实验阶段,不建议直接使用在生产环境
为解决 使用 vue-tsc 内部 API 生成 .d.ts
文件时,
由于vue-tsc内部 API 变更过于频繁,
无法基于 semver 规范宽松匹配 vue-tsc 版本的问题。
基于 vue-tsc >=2.0.19 封装
如果部分 volar 插件无法正确的加载,可能是 该 volar 插件未适配 vue/language-tools 2.x.x 的更新
安装
npm i @vrx-volar/tsc
yarn add @vrx-volar/tsc
pnpm add @vrx-volar/tsc
bun add @vrx-volar/tsc
proxyCreateProgram
将 ts.Program
处理拥有能处理 vue 文件的能力
为了使 vue-tsc#run 方法可以单独用来创建
ts.Program
import { proxyCreateProgram } from '@vrx-volar/tsc'
import * as vue from '@vue/language-core'
import ts from 'typescript'
const host = ts.createCompilerHost({})
const createProgram = proxyCreateProgram({})
const program = createProgram({
rootNames,
options: {
target: ts.ScriptTarget.ESNext,
moduleResolution: ts.ModuleResolutionKind.Bundler,
noImplicitAny: false,
allowJs: true,
declaration: true,
emitDeclarationOnly: true,
strict: true,
isolatedModules: true,
esModuleInterop: true,
skipLibCheck: true,
jsx: ts.JsxEmit.Preserve,
},
host,
configFileParsingDiagnostics,
})
createProgram
创建 可解析 vue 文件的 ts.Program
import { createProgram } from '@vrx-volar/tsc'
import { globby } from 'globby'
const rootNames = await globby(
['**/*.vue', '**/*.?({m,c}){ts,js}?(x)'],
{
absolute: true,
onlyFiles: true,
},
)
const program = await createProgram(rootNames)
typeCheck
检查 ts.Program
内项目文件语法合理性
import { createProgram } from '@vrx-volar/tsc'
const program = await createProgram(rootNames)
typeCheck(program)
triggerProgramResult
获取ts.Program
处理后的项目文件
import { writeFile } from 'node:fs/promises'
import { createProgram } from '@vrx-volar/tsc'
const program = await createProgram(rootNames)
const { files } = triggerProgramResult(program)
await Promise.all(
files.map((item) => {
return writeFile(item.file, item.content)
})
)