diff --git a/package.json b/package.json index 59e62f65c2a2cb7c66677bc7c245742d8d6f8f95..42a583974f6dd834d1a3b4f423ed3e05533d7973 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 9c3e6db9c8b06f8d34d2e1b41548556c687bbe62..f562a932824bfba8639c2130a2d1b690212b769c 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 0000000000000000000000000000000000000000..e199471173a6100b5f2434865914176c5f87c400 --- /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 41f405ce853f9498e93c641b0559ee97d85ed73b..08ffbfa93b484ca5604b6254b723340a625341fe 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 bb67c5ddea85907dd0c35da34a51498adbbfe406..7474960f73bc6702a8c74984ee31116fe151edc1 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 204579e735711e40d79884b509b5fc31c1d2c9c4..801c593f6c379799e4126630d0902aafed9f92cc 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 77fd79515e3fee4ded7ff5f93a370de1156aee7a..1a38e195cac76a82d4d6531b368924c75ccd294e 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 0000000000000000000000000000000000000000..6f5724544c9e2f66d49964cd05dd594710f747c5 --- /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 b3739cae5d80f920560e9b42970f76431da981b9..709f6ceccfc8550aa7d3eb8ca87461bc7c99d71f 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 67b65d7b9d81fbb71a5ddbfac8d978ddac7d2197..8ae68641375d4e6d4a39493d9d3adb3abfd5415c 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"