From 3001efa90f3acb8f65291447bf4e002e95757f6e Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Sat, 19 Dec 2020 18:30:02 +0800 Subject: [PATCH] feat(cli): add copy --- package.json | 1 + packages/vite-plugin-uni/package.json | 3 ++- .../src/build/buildPluginCopy.ts | 21 +++++++++++++++++++ .../src/build/buildPluginPagesJson.ts | 1 - packages/vite-plugin-uni/src/build/index.ts | 1 + packages/vite-plugin-uni/src/index.ts | 15 +++++++++++-- .../src/server/serverPluginEnv.ts | 13 +++--------- .../vite-plugin-uni/src/utils/easycomUtils.ts | 16 ++++++++++++++ .../src/utils/pagesJsonUtils.ts | 4 +++- yarn.lock | 6 ++++++ 10 files changed, 66 insertions(+), 15 deletions(-) create mode 100644 packages/vite-plugin-uni/src/build/buildPluginCopy.ts create mode 100644 packages/vite-plugin-uni/src/utils/easycomUtils.ts diff --git a/package.json b/package.json index 59e62f65c..42a583974 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@rollup/plugin-node-resolve": "^8.0.0", "@rollup/plugin-replace": "^2.2.1", "@types/debug": "^4.1.5", + "@types/fs-extra": "^9.0.5", "@types/jest": "^26.0.0", "@types/node": "13.11.1", "@types/puppeteer": "^2.0.0", diff --git a/packages/vite-plugin-uni/package.json b/packages/vite-plugin-uni/package.json index 9c3e6db9c..f562a9328 100644 --- a/packages/vite-plugin-uni/package.json +++ b/packages/vite-plugin-uni/package.json @@ -23,10 +23,11 @@ "dependencies": { "@rollup/pluginutils": "^4.1.0", "estree-walker": "^2.0.1", + "fs-extra": "^9.0.1", "magic-string": "^0.25.7" }, "peerDependencies": { "@dcloudio/uni-cli-shared": "^3.0.0", - "vite": "^1.0.0-rc.12" + "vite": "^1.0.0-rc.13" } } diff --git a/packages/vite-plugin-uni/src/build/buildPluginCopy.ts b/packages/vite-plugin-uni/src/build/buildPluginCopy.ts new file mode 100644 index 000000000..e19947117 --- /dev/null +++ b/packages/vite-plugin-uni/src/build/buildPluginCopy.ts @@ -0,0 +1,21 @@ +// import path from 'path' +// import fs from 'fs-extra' + +import { Plugin } from 'rollup' + +// const publicDir = '/Users/fxy/Documents/demo/my-vite-uniapp-project/src/static' +// const outDir = '/Users/fxy/Documents/demo/my-vite-uniapp-project/static' + +export const buildPluginCopy: Plugin = { + name: 'uni:copy', + async generateBundle() { + // https://github.com/vitejs/vite/blob/master/src/node/build/index.ts#L621 + // setTimeout(async () => { + // if (fs.existsSync(publicDir)) { + // for (const file of await fs.readdir(publicDir)) { + // await fs.copy(path.join(publicDir, file), path.resolve(outDir, file)) + // } + // } + // }, 100) + } +} diff --git a/packages/vite-plugin-uni/src/build/buildPluginPagesJson.ts b/packages/vite-plugin-uni/src/build/buildPluginPagesJson.ts index 41f405ce8..08ffbfa93 100644 --- a/packages/vite-plugin-uni/src/build/buildPluginPagesJson.ts +++ b/packages/vite-plugin-uni/src/build/buildPluginPagesJson.ts @@ -16,7 +16,6 @@ export const buildPluginPagesJson: Plugin = { }, load(id) { if (id.endsWith(pagesJsonAliasName)) { - console.log(id.replace(pagesJsonAliasName, pagesJsonName)) return parsePagesJson( fs .readFileSync(id.replace(pagesJsonAliasName, pagesJsonName)) diff --git a/packages/vite-plugin-uni/src/build/index.ts b/packages/vite-plugin-uni/src/build/index.ts index bb67c5dde..7474960f7 100644 --- a/packages/vite-plugin-uni/src/build/index.ts +++ b/packages/vite-plugin-uni/src/build/index.ts @@ -1,3 +1,4 @@ +export * from './buildPluginCopy' export * from './buildPluginInject' export * from './buildPluginMainJs' export * from './buildPluginPagesJson' diff --git a/packages/vite-plugin-uni/src/index.ts b/packages/vite-plugin-uni/src/index.ts index 204579e73..801c593f6 100644 --- a/packages/vite-plugin-uni/src/index.ts +++ b/packages/vite-plugin-uni/src/index.ts @@ -9,6 +9,7 @@ import { } from './server' import { + buildPluginCopy, buildPluginInject, buildPluginMainJs, buildPluginPagesJson, @@ -16,10 +17,16 @@ import { } from './build' import { dynamicImportCode } from './utils/dynamicImportUtils' +import { initEasycoms } from './utils/easycomUtils' const VUES = ['vue', 'vue.js', './vue.js'] -const plugins = [buildPluginMainJs, buildPluginPagesJson, buildPluginInject] +const plugins = [ + buildPluginMainJs, + buildPluginPagesJson, + buildPluginInject, + buildPluginCopy +] if (dynamicImportCode) { plugins.push(buildPluginDynamicImport) @@ -47,8 +54,12 @@ const plugin: Plugin = { rollupInputOptions: { plugins }, - vueCompilerOptions + vueCompilerOptions, + configureBuild({ root }) { + initEasycoms(root) + } } +// TODO 等待 vite 升级支持以下配置 Object.assign(plugin, { optimizeDeps: { exclude: [ diff --git a/packages/vite-plugin-uni/src/server/serverPluginEnv.ts b/packages/vite-plugin-uni/src/server/serverPluginEnv.ts index 77fd79515..1a38e195c 100644 --- a/packages/vite-plugin-uni/src/server/serverPluginEnv.ts +++ b/packages/vite-plugin-uni/src/server/serverPluginEnv.ts @@ -1,22 +1,15 @@ -import path from 'path' - import { ServerPlugin } from 'vite' -import { initEasycom } from '@dcloudio/uni-cli-shared' +import { initEasycoms } from '../utils/easycomUtils' export const serverPluginEnv: ServerPlugin = ({ root, watcher }) => { - const rootDir = path.resolve(root, 'src') - const dirs = ['components'].map(dir => path.resolve(rootDir, dir)) - const easycomOptions = { dirs, rootDir: rootDir } - - initEasycom(easycomOptions) - + const { dirs, refresh } = initEasycoms(root) watcher.on('all', (eventName, path) => { if (!['add', 'unlink'].includes(eventName)) { return } if (dirs.find(dir => path.startsWith(dir))) { - initEasycom(easycomOptions) + refresh() } }) } diff --git a/packages/vite-plugin-uni/src/utils/easycomUtils.ts b/packages/vite-plugin-uni/src/utils/easycomUtils.ts new file mode 100644 index 000000000..6f5724544 --- /dev/null +++ b/packages/vite-plugin-uni/src/utils/easycomUtils.ts @@ -0,0 +1,16 @@ +import path from 'path' + +import { initEasycom } from '@dcloudio/uni-cli-shared' + +export function initEasycoms(root: string) { + const rootDir = path.resolve(root, 'src') + const dirs = ['components'].map(dir => path.resolve(rootDir, dir)) + const easycomOptions = { dirs, rootDir: rootDir } + initEasycom(easycomOptions) + return { + dirs, + refresh() { + initEasycom(easycomOptions) + } + } +} diff --git a/packages/vite-plugin-uni/src/utils/pagesJsonUtils.ts b/packages/vite-plugin-uni/src/utils/pagesJsonUtils.ts index b3739cae5..709f6cecc 100644 --- a/packages/vite-plugin-uni/src/utils/pagesJsonUtils.ts +++ b/packages/vite-plugin-uni/src/utils/pagesJsonUtils.ts @@ -2,6 +2,8 @@ import path from 'path' import slash from 'slash' +import { camelize, capitalize } from '@vue/shared' + import { parseJson } from '@dcloudio/uni-cli-shared' interface PageOptions { @@ -103,7 +105,7 @@ function formatPagesJson(jsonStr: string) { } function formatPageIdentifier(path: string) { - return path.replace(/\//g, '') + return capitalize(camelize(path.replace(/\//g, '-'))) } function generatePageDefineCode(pageOptions: PageOptions) { diff --git a/yarn.lock b/yarn.lock index 67b65d7b9..8ae686413 100644 --- a/yarn.lock +++ b/yarn.lock @@ -714,6 +714,12 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/fs-extra@^9.0.5": + version "9.0.5" + resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.5.tgz#2afb76a43a4bef80a363b94b314d0ca1694fc4f8" + dependencies: + "@types/node" "*" + "@types/graceful-fs@^4.1.2": version "4.1.4" resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" -- GitLab