diff --git a/packages/vant-cli/src/common/css.ts b/packages/vant-cli/src/common/css.ts index 72cd04011..e8453e465 100644 --- a/packages/vant-cli/src/common/css.ts +++ b/packages/vant-cli/src/common/css.ts @@ -38,7 +38,7 @@ export function getCssBaseFile() { const IMPORT_STYLE_RE = /import\s+?(?:(?:".*?")|(?:'.*?'))[\s]*?(?:;|$|)/g; // "import 'a.less';" => "import 'a.css';" -export function replaceCssImport(code: string) { +export function replaceCssImportExt(code: string) { return code.replace(IMPORT_STYLE_RE, str => str.replace(`.${CSS_LANG}`, '.css') ); diff --git a/packages/vant-cli/src/compiler/compile-js.ts b/packages/vant-cli/src/compiler/compile-js.ts index cc603bd57..a2d976b98 100644 --- a/packages/vant-cli/src/compiler/compile-js.ts +++ b/packages/vant-cli/src/compiler/compile-js.ts @@ -1,16 +1,18 @@ import { transformAsync } from '@babel/core'; import { readFileSync, removeSync, outputFileSync } from 'fs-extra'; import { replaceExt } from '../common'; -import { replaceCssImport } from '../common/css'; +import { replaceCssImportExt } from '../common/css'; +import { replaceScriptImportExt } from './get-deps'; export function compileJs(filePath: string): Promise { return new Promise((resolve, reject) => { let code = readFileSync(filePath, 'utf-8'); - code = replaceCssImport(code); + code = replaceCssImportExt(code); + code = replaceScriptImportExt(code, '.vue', ''); transformAsync(code, { filename: filePath }) - .then(result => { + .then((result) => { if (result) { const jsFilePath = replaceExt(filePath, '.js'); diff --git a/packages/vant-cli/src/compiler/compile-sfc.ts b/packages/vant-cli/src/compiler/compile-sfc.ts index 0a162e3c9..11198e432 100644 --- a/packages/vant-cli/src/compiler/compile-sfc.ts +++ b/packages/vant-cli/src/compiler/compile-sfc.ts @@ -87,7 +87,7 @@ export async function compileSfc(filePath: string): Promise { const descriptor = parseSfc(filePath); const { template, styles } = descriptor; - const hasScoped = styles.some(s => s.scoped); + const hasScoped = styles.some((s) => s.scoped); const scopeId = hasScoped ? `data-v-${hash(source)}` : ''; // compile js part @@ -107,9 +107,7 @@ export async function compileSfc(filePath: string): Promise { } writeFileSync(jsFilePath, script); - compileJs(jsFilePath) - .then(resolve) - .catch(reject); + compileJs(jsFilePath).then(resolve).catch(reject); }) ); } diff --git a/packages/vant-cli/src/compiler/get-deps.ts b/packages/vant-cli/src/compiler/get-deps.ts index 367c3f951..a13404606 100644 --- a/packages/vant-cli/src/compiler/get-deps.ts +++ b/packages/vant-cli/src/compiler/get-deps.ts @@ -71,3 +71,15 @@ export function getDeps(filePath: string) { return paths; } + +// "import App from 'App.vue';" => "import App from 'App.xxx';" +export function replaceScriptImportExt(code: string, from: string, to: string) { + const importLines = matchImports(code); + + importLines.forEach(importLine => { + const result = importLine.replace(from, to); + code = code.replace(importLine, result); + }); + + return code; +}