From 71415e467dcc07e3bd699b3a9d1338f319925846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=98=89=E6=B6=B5?= Date: Thu, 12 Dec 2019 16:20:15 +0800 Subject: [PATCH] fix(cli): compile commonjs module --- packages/vant-cli/package.json | 1 + packages/vant-cli/src/commands/build.ts | 4 +- packages/vant-cli/src/compiler/compile-js.ts | 45 +++++++++++++++++-- .../src/compiler/gen-package-entry.ts | 2 +- packages/vant-cli/yarn.lock | 10 ++++- 5 files changed, 55 insertions(+), 7 deletions(-) diff --git a/packages/vant-cli/package.json b/packages/vant-cli/package.json index 9fc7c1c27..493f501d8 100644 --- a/packages/vant-cli/package.json +++ b/packages/vant-cli/package.json @@ -73,6 +73,7 @@ "csso": "^4.0.2", "decamelize": "^3.2.0", "eslint": "^6.7.1", + "find-babel-config": "^1.2.0", "gh-pages": "2.0.1", "html-webpack-plugin": "3.2.0", "husky": "^3.1.0", diff --git a/packages/vant-cli/src/commands/build.ts b/packages/vant-cli/src/commands/build.ts index 98657eae4..0c89e790f 100644 --- a/packages/vant-cli/src/commands/build.ts +++ b/packages/vant-cli/src/commands/build.ts @@ -45,7 +45,7 @@ async function compileDir(dir: string) { } if (isScript(filePath)) { - return compileJs(filePath); + return compileJs(filePath, { reloadConfig: true }); } if (isStyle(filePath)) { @@ -129,7 +129,7 @@ async function buildPackageEntry() { setModuleEnv('commonjs'); await copy(esEntryFile, libEntryFile); - await compileJs(libEntryFile); + await compileJs(libEntryFile, { reloadConfig: true }); await compileStyle(styleEntryFile); stepper.success('Build Package Entry'); diff --git a/packages/vant-cli/src/compiler/compile-js.ts b/packages/vant-cli/src/compiler/compile-js.ts index c9685d1fd..75156f7e2 100644 --- a/packages/vant-cli/src/compiler/compile-js.ts +++ b/packages/vant-cli/src/compiler/compile-js.ts @@ -1,10 +1,49 @@ +// @ts-ignore +import findBabelConfig from 'find-babel-config'; +import { join } from 'path'; import { transformFileAsync } from '@babel/core'; -import { removeSync, outputFileSync } from 'fs-extra'; +import { removeSync, outputFileSync, existsSync } from 'fs-extra'; import { replaceExt } from '../common'; +import { CWD, DIST_DIR } from '../common/constant'; -export function compileJs(filePath: string): Promise { +type Options = { + // whether to fouce reload babel config + reloadConfig?: boolean; +}; + +const TEMP_BABEL_CONFIG = join(DIST_DIR, 'babel.config.js'); + +function genTempBabelConfig() { + const { config } = findBabelConfig.sync(CWD); + const content = `module.exports = function (api) { + api.cache.never(); + + return ${JSON.stringify(config)} +};`; + + outputFileSync(TEMP_BABEL_CONFIG, content); +} + +function getBabelOptions(options: Options) { + if (options.reloadConfig) { + if (!existsSync(TEMP_BABEL_CONFIG)) { + genTempBabelConfig(); + } + + return { + configFile: TEMP_BABEL_CONFIG + }; + } + + return {}; +} + +export function compileJs( + filePath: string, + options: Options = {} +): Promise { return new Promise((resolve, reject) => { - transformFileAsync(filePath) + transformFileAsync(filePath, getBabelOptions(options)) .then(result => { if (result) { const jsFilePath = replaceExt(filePath, '.js'); diff --git a/packages/vant-cli/src/compiler/gen-package-entry.ts b/packages/vant-cli/src/compiler/gen-package-entry.ts index c647ca12e..4ceb02838 100644 --- a/packages/vant-cli/src/compiler/gen-package-entry.ts +++ b/packages/vant-cli/src/compiler/gen-package-entry.ts @@ -39,7 +39,7 @@ const version = '${version}'; function install(Vue) { const components = [ - ${components.filter(item => !skipInstall.includes(item)).join(',\n ')} + ${components.filter(item => !skipInstall.includes(item)).join(',\n ')} ]; components.forEach(item => { diff --git a/packages/vant-cli/yarn.lock b/packages/vant-cli/yarn.lock index ce70519a0..44d1568e1 100644 --- a/packages/vant-cli/yarn.lock +++ b/packages/vant-cli/yarn.lock @@ -4651,6 +4651,14 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" +find-babel-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" + integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== + dependencies: + json5 "^0.5.1" + path-exists "^3.0.0" + find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz?cache=0&sync_timestamp=1573277814677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-cache-dir%2Fdownload%2Ffind-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" @@ -6560,7 +6568,7 @@ json5@2.x, json5@^2.1.0: dependencies: minimist "^1.2.0" -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=