提交 47c0f439 编写于 作者: fxy060608's avatar fxy060608

fix: fix path normalization for windows paths w/ non ascii chars

上级 e3b1030a
...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { ...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.buildOptions = void 0; exports.buildOptions = void 0;
const path_1 = __importDefault(require("path")); const path_1 = __importDefault(require("path"));
const slash_1 = __importDefault(require("slash"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
function buildOptions() { function buildOptions() {
return { return {
...@@ -20,7 +19,7 @@ function buildOptions() { ...@@ -20,7 +19,7 @@ function buildOptions() {
chunkFileNames(chunk) { chunkFileNames(chunk) {
if (chunk.isDynamicEntry && chunk.facadeModuleId) { if (chunk.isDynamicEntry && chunk.facadeModuleId) {
const filepath = path_1.default.relative(process.env.UNI_INPUT_DIR, chunk.facadeModuleId); const filepath = path_1.default.relative(process.env.UNI_INPUT_DIR, chunk.facadeModuleId);
return slash_1.default(filepath.replace(path_1.default.extname(filepath), '.js')); return uni_cli_shared_1.normalizePath(filepath.replace(path_1.default.extname(filepath), '.js'));
} }
return '[name].js'; return '[name].js';
}, },
......
...@@ -5,21 +5,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) { ...@@ -5,21 +5,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.uniCopyPlugin = void 0; exports.uniCopyPlugin = void 0;
const path_1 = __importDefault(require("path")); const path_1 = __importDefault(require("path"));
const slash_1 = __importDefault(require("slash"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
function uniCopyPlugin() { function uniCopyPlugin() {
return uni_cli_shared_1.uniViteCopyPlugin({ return uni_cli_shared_1.uniViteCopyPlugin({
targets: [ targets: [
{ {
src: slash_1.default(path_1.default.resolve(__dirname, '../../lib/template/*.js')), src: uni_cli_shared_1.normalizePath(path_1.default.resolve(__dirname, '../../lib/template/*.js')),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
}, },
{ {
src: slash_1.default(path_1.default.resolve(__dirname, '../../lib/template/*.png')), src: uni_cli_shared_1.normalizePath(path_1.default.resolve(__dirname, '../../lib/template/*.png')),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
}, },
{ {
src: slash_1.default(path_1.default.resolve(__dirname, '../../lib/template/__uniappview.html')), src: uni_cli_shared_1.normalizePath(path_1.default.resolve(__dirname, '../../lib/template/__uniappview.html')),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
transform(content) { transform(content) {
const { globalStyle } = uni_cli_shared_1.parsePagesJsonOnce(process.env.UNI_INPUT_DIR, process.env.UNI_PLATFORM); const { globalStyle } = uni_cli_shared_1.parsePagesJsonOnce(process.env.UNI_INPUT_DIR, process.env.UNI_PLATFORM);
...@@ -36,7 +35,7 @@ function uniCopyPlugin() { ...@@ -36,7 +35,7 @@ function uniCopyPlugin() {
}, },
}, },
{ {
src: slash_1.default(require.resolve('@dcloudio/uni-app-plus/dist/uni-app-view.umd.js')), src: uni_cli_shared_1.normalizePath(require.resolve('@dcloudio/uni-app-plus/dist/uni-app-view.umd.js')),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
}, },
], ],
......
...@@ -17,7 +17,7 @@ function uniManifestJsonPlugin() { ...@@ -17,7 +17,7 @@ function uniManifestJsonPlugin() {
return; return;
} }
this.addWatchFile(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'manifest.json')); this.addWatchFile(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'manifest.json'));
manifestJson = uni_cli_shared_1.normalizeAppManifestJson(JSON.parse(code), uni_cli_shared_1.parsePagesJsonOnce(process.env.UNI_INPUT_DIR, process.env.UNI_PLATFORM)); manifestJson = uni_cli_shared_1.normalizeAppManifestJson(uni_cli_shared_1.parseJson(code), uni_cli_shared_1.parsePagesJsonOnce(process.env.UNI_INPUT_DIR, process.env.UNI_PLATFORM));
return ''; return '';
}, },
generateBundle() { generateBundle() {
......
import path from 'path' import path from 'path'
import slash from 'slash'
import { UserConfig } from 'vite' import { UserConfig } from 'vite'
import { resolveMainPathOnce } from '@dcloudio/uni-cli-shared' import { normalizePath, resolveMainPathOnce } from '@dcloudio/uni-cli-shared'
export function buildOptions(): UserConfig['build'] { export function buildOptions(): UserConfig['build'] {
return { return {
...@@ -20,7 +19,9 @@ export function buildOptions(): UserConfig['build'] { ...@@ -20,7 +19,9 @@ export function buildOptions(): UserConfig['build'] {
process.env.UNI_INPUT_DIR, process.env.UNI_INPUT_DIR,
chunk.facadeModuleId chunk.facadeModuleId
) )
return slash(filepath.replace(path.extname(filepath), '.js')) return normalizePath(
filepath.replace(path.extname(filepath), '.js')
)
} }
return '[name].js' return '[name].js'
}, },
......
import path from 'path' import path from 'path'
import slash from 'slash'
import { parsePagesJsonOnce, uniViteCopyPlugin } from '@dcloudio/uni-cli-shared' import {
normalizePath,
parsePagesJsonOnce,
uniViteCopyPlugin,
} from '@dcloudio/uni-cli-shared'
export function uniCopyPlugin() { export function uniCopyPlugin() {
return uniViteCopyPlugin({ return uniViteCopyPlugin({
targets: [ targets: [
{ {
src: slash(path.resolve(__dirname, '../../lib/template/*.js')), src: normalizePath(path.resolve(__dirname, '../../lib/template/*.js')),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
}, },
{ {
src: slash(path.resolve(__dirname, '../../lib/template/*.png')), src: normalizePath(path.resolve(__dirname, '../../lib/template/*.png')),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
}, },
{ {
src: slash( src: normalizePath(
path.resolve(__dirname, '../../lib/template/__uniappview.html') path.resolve(__dirname, '../../lib/template/__uniappview.html')
), ),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
...@@ -40,7 +43,7 @@ export function uniCopyPlugin() { ...@@ -40,7 +43,7 @@ export function uniCopyPlugin() {
}, },
}, },
{ {
src: slash( src: normalizePath(
require.resolve('@dcloudio/uni-app-plus/dist/uni-app-view.umd.js') require.resolve('@dcloudio/uni-app-plus/dist/uni-app-view.umd.js')
), ),
dest: process.env.UNI_OUTPUT_DIR, dest: process.env.UNI_OUTPUT_DIR,
......
...@@ -4,6 +4,7 @@ import { Plugin } from 'vite' ...@@ -4,6 +4,7 @@ import { Plugin } from 'vite'
import { import {
defineUniManifestJsonPlugin, defineUniManifestJsonPlugin,
normalizeAppManifestJson, normalizeAppManifestJson,
parseJson,
parsePagesJsonOnce, parsePagesJsonOnce,
} from '@dcloudio/uni-cli-shared' } from '@dcloudio/uni-cli-shared'
...@@ -21,7 +22,7 @@ export function uniManifestJsonPlugin(): Plugin { ...@@ -21,7 +22,7 @@ export function uniManifestJsonPlugin(): Plugin {
path.resolve(process.env.UNI_INPUT_DIR, 'manifest.json') path.resolve(process.env.UNI_INPUT_DIR, 'manifest.json')
) )
manifestJson = normalizeAppManifestJson( manifestJson = normalizeAppManifestJson(
JSON.parse(code), parseJson(code),
parsePagesJsonOnce( parsePagesJsonOnce(
process.env.UNI_INPUT_DIR, process.env.UNI_INPUT_DIR,
process.env.UNI_PLATFORM process.env.UNI_PLATFORM
......
import path from 'path' import path from 'path'
import { normalizePath } from '../src/utils'
import { initEasycoms, matchEasycom } from '../src/easycom' import { initEasycoms, matchEasycom } from '../src/easycom'
const rootDir = path.resolve(__dirname, 'examples/easycom') const rootDir = path.resolve(__dirname, 'examples/easycom')
...@@ -9,26 +9,42 @@ describe('easycom', () => { ...@@ -9,26 +9,42 @@ describe('easycom', () => {
expect(initEasycoms(rootDir, 'h5').easycoms).toEqual([ expect(initEasycoms(rootDir, 'h5').easycoms).toEqual([
{ {
pattern: new RegExp('^test$'), pattern: new RegExp('^test$'),
replacement: '@/components/test/test.vue', replacement: normalizePath(
path.resolve(rootDir, 'components/test/test.vue')
),
}, },
{ {
pattern: new RegExp('^test1$'), pattern: new RegExp('^test1$'),
replacement: '@/components/test1/test1.vue', replacement: normalizePath(
path.resolve(rootDir, 'components/test1/test1.vue')
),
}, },
{ {
pattern: new RegExp('^test2$'), pattern: new RegExp('^test2$'),
replacement: '@/uni_modules/plugin/components/test2/test2.vue', replacement: normalizePath(
path.resolve(rootDir, 'uni_modules/plugin/components/test2/test2.vue')
),
}, },
{ {
pattern: new RegExp('^uni-(.*)'), pattern: new RegExp('^uni-(.*)'),
replacement: '@/components/uni-$1.vue', replacement: normalizePath(
path.resolve(rootDir, 'components/uni-$1.vue')
),
}, },
]) ])
expect(matchEasycom('test')).toBe('@/components/test/test.vue') expect(matchEasycom('test')).toBe(
expect(matchEasycom('test1')).toBe('@/components/test1/test1.vue') normalizePath(path.resolve(rootDir, 'components/test/test.vue'))
)
expect(matchEasycom('test1')).toBe(
normalizePath(path.resolve(rootDir, 'components/test1/test1.vue'))
)
expect(matchEasycom('test2')).toBe( expect(matchEasycom('test2')).toBe(
'@/uni_modules/plugin/components/test2/test2.vue' normalizePath(
path.resolve(rootDir, 'uni_modules/plugin/components/test2/test2.vue')
)
)
expect(matchEasycom('uni-test1')).toBe(
normalizePath(path.resolve(rootDir, 'components/uni-test1.vue'))
) )
expect(matchEasycom('uni-test1')).toBe('@/components/uni-test1.vue')
}) })
}) })
...@@ -26,7 +26,6 @@ ...@@ -26,7 +26,6 @@
"jsonc-parser": "^3.0.0", "jsonc-parser": "^3.0.0",
"merge": "^2.1.1", "merge": "^2.1.1",
"rollup-plugin-copy": "^3.4.0", "rollup-plugin-copy": "^3.4.0",
"slash": "^3.0.0",
"tapable": "^2.2.0", "tapable": "^2.2.0",
"xregexp": "3.1.0" "xregexp": "3.1.0"
}, },
......
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
import debug from 'debug' import debug from 'debug'
import slash from 'slash'
import { extend } from '@vue/shared' import { extend } from '@vue/shared'
import { createFilter } from '@rollup/pluginutils' import { createFilter } from '@rollup/pluginutils'
import { once } from '@dcloudio/uni-shared' import { once } from '@dcloudio/uni-shared'
import { normalizePath } from './utils'
import { parsePagesJson, parsePagesJsonOnce } from './json/pages' import { parsePagesJson, parsePagesJsonOnce } from './json/pages'
interface EasycomOption { interface EasycomOption {
dirs?: string[] dirs?: string[]
rootDir?: string rootDir: string
extensions?: string[] extensions?: string[]
autoscan?: boolean autoscan?: boolean
custom?: EasycomCustom custom?: EasycomCustom
...@@ -118,7 +118,12 @@ function initEasycom({ ...@@ -118,7 +118,12 @@ function initEasycom({
extend(easycomsObj, initAutoScanEasycoms(dirs, rootDir, extensions)) extend(easycomsObj, initAutoScanEasycoms(dirs, rootDir, extensions))
} }
if (custom) { if (custom) {
extend(easycomsObj, custom) Object.keys(custom).forEach((name) => {
const componentPath = custom[name]
easycomsObj[name] = componentPath.startsWith('@/')
? normalizePath(path.join(rootDir!, componentPath.substr(2)))
: componentPath
})
} }
Object.keys(easycomsObj).forEach((name) => { Object.keys(easycomsObj).forEach((name) => {
easycoms.push({ easycoms.push({
...@@ -172,7 +177,7 @@ function initAutoScanEasycom( ...@@ -172,7 +177,7 @@ function initAutoScanEasycom(
if (!isDir(folder)) { if (!isDir(folder)) {
return return
} }
const importDir = slash(folder) const importDir = normalizePath(folder)
const files = fs.readdirSync(folder) const files = fs.readdirSync(folder)
// 读取文件夹文件列表,比对文件名(fs.existsSync在大小写不敏感的系统会匹配不准确) // 读取文件夹文件列表,比对文件名(fs.existsSync在大小写不敏感的系统会匹配不准确)
for (let i = 0; i < extensions.length; i++) { for (let i = 0; i < extensions.length; i++) {
......
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
import slash from 'slash'
import { extend, hasOwn, isArray, isPlainObject } from '@vue/shared' import { extend, hasOwn, isArray, isPlainObject } from '@vue/shared'
import { once, TABBAR_HEIGHT } from '@dcloudio/uni-shared' import { once, TABBAR_HEIGHT } from '@dcloudio/uni-shared'
import { normalizePath } from '../utils'
import { parseJson } from './json' import { parseJson } from './json'
export const parsePagesJson = ( export const parsePagesJson = (
...@@ -84,7 +83,7 @@ function normalizeSubpackages( ...@@ -84,7 +83,7 @@ function normalizeSubpackages(
subpackages.forEach(({ root, pages: subPages }) => { subpackages.forEach(({ root, pages: subPages }) => {
if (root && subPages.length) { if (root && subPages.length) {
subPages.forEach((subPage) => { subPages.forEach((subPage) => {
subPage.path = slash(path.join(root, subPage.path)) subPage.path = normalizePath(path.join(root, subPage.path))
pages.push(subPage) pages.push(subPage)
}) })
} }
......
import fs from 'fs' import fs from 'fs'
import os from 'os' import os from 'os'
import path from 'path' import path from 'path'
import slash from 'slash'
import { camelize, capitalize } from '@vue/shared' import { camelize, capitalize } from '@vue/shared'
import { once } from '@dcloudio/uni-shared' import { once } from '@dcloudio/uni-shared'
import { PAGE_EXTNAME, PAGE_EXTNAME_APP } from './constants' import { PAGE_EXTNAME, PAGE_EXTNAME_APP } from './constants'
const isWindows = os.platform() === 'win32' export const isWindows = os.platform() === 'win32'
export function normalizePath(id: string): string { export function normalizePath(id: string): string {
return path.posix.normalize(isWindows ? slash(id) : id) return isWindows ? id.replace(/\\/g, '/') : id
} }
export const resolveMainPathOnce = once((inputDir: string) => { export const resolveMainPathOnce = once((inputDir: string) => {
......
// import path from 'path'
// import slash from 'slash'
import { Plugin } from 'vite' import { Plugin } from 'vite'
import { createFilter, FilterPattern } from '@rollup/pluginutils' import { createFilter, FilterPattern } from '@rollup/pluginutils'
......
import path from 'path' import path from 'path'
import debug from 'debug' import debug from 'debug'
import slash from 'slash'
import { Plugin } from 'vite' import { Plugin } from 'vite'
import { resolveMainPathOnce } from '../../utils' import { normalizePath, resolveMainPathOnce } from '../../utils'
import { EXTNAME_VUE_RE } from '../../constants' import { EXTNAME_VUE_RE } from '../../constants'
const cssLangs = `\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)` const cssLangs = `\\.(css|less|sass|scss|styl|stylus|pcss|postcss)($|\\?)`
...@@ -20,7 +19,7 @@ const isCss = (id: string): boolean => ...@@ -20,7 +19,7 @@ const isCss = (id: string): boolean =>
cssLangRE.test(id) && !commonjsProxyRE.test(id) cssLangRE.test(id) && !commonjsProxyRE.test(id)
function normalizeCssChunkFilename(id: string) { function normalizeCssChunkFilename(id: string) {
return slash( return normalizePath(
path.relative( path.relative(
process.env.UNI_INPUT_DIR, process.env.UNI_INPUT_DIR,
id.split('?')[0].replace(EXTNAME_VUE_RE, '.css') id.split('?')[0].replace(EXTNAME_VUE_RE, '.css')
......
import fs from 'fs' import fs from 'fs'
import path from 'path' import path from 'path'
import slash from 'slash' import { normalizePath } from '../../utils'
import { import {
CreateUniViteFilterPlugin, CreateUniViteFilterPlugin,
UniViteFilterPluginOptions, UniViteFilterPluginOptions,
...@@ -39,7 +39,7 @@ function createDefineJsonJsPlugin(name: 'pages.json' | 'manifest.json') { ...@@ -39,7 +39,7 @@ function createDefineJsonJsPlugin(name: 'pages.json' | 'manifest.json') {
} }
plugin.configResolved = function (config) { plugin.configResolved = function (config) {
opts.resolvedConfig = config opts.resolvedConfig = config
jsonPath = slash(path.join(process.env.UNI_INPUT_DIR, name)) jsonPath = normalizePath(path.join(process.env.UNI_INPUT_DIR, name))
return origConfigResolved && origConfigResolved(config) return origConfigResolved && origConfigResolved(config)
} }
......
import path from 'path' import path from 'path'
import slash from 'slash' import { normalizePath } from '../../utils'
import { import {
CreateUniViteFilterPlugin, CreateUniViteFilterPlugin,
...@@ -23,7 +23,9 @@ export function defineUniMainJsPlugin( ...@@ -23,7 +23,9 @@ export function defineUniMainJsPlugin(
let mainTsPath = '' let mainTsPath = ''
plugin.configResolved = function (config) { plugin.configResolved = function (config) {
opts.resolvedConfig = config opts.resolvedConfig = config
const mainPath = slash(path.resolve(process.env.UNI_INPUT_DIR, 'main')) const mainPath = normalizePath(
path.resolve(process.env.UNI_INPUT_DIR, 'main')
)
mainJsPath = mainPath + '.js' mainJsPath = mainPath + '.js'
mainTsPath = mainPath + '.ts' mainTsPath = mainPath + '.ts'
return origConfigResolved && origConfigResolved(config) return origConfigResolved && origConfigResolved(config)
......
...@@ -15,14 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true }); ...@@ -15,14 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.createHandleHotUpdate = void 0; exports.createHandleHotUpdate = void 0;
const path_1 = __importDefault(require("path")); const path_1 = __importDefault(require("path"));
const debug_1 = __importDefault(require("debug")); const debug_1 = __importDefault(require("debug"));
const slash_1 = __importDefault(require("slash"));
const shared_1 = require("@vue/shared"); const shared_1 = require("@vue/shared");
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const utils_1 = require("../utils"); const utils_1 = require("../utils");
const debugHmr = debug_1.default('vite:uni:hmr'); const debugHmr = debug_1.default('vite:uni:hmr');
function invalidate(file, moduleGraph) { function invalidate(file, moduleGraph) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
const mods = yield moduleGraph.getModulesByFile(slash_1.default(file)); const mods = yield moduleGraph.getModulesByFile(uni_cli_shared_1.normalizePath(file));
if (mods && mods.size) { if (mods && mods.size) {
; ;
[...mods].forEach((mod) => { [...mods].forEach((mod) => {
......
...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { ...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.uniMainJsPlugin = void 0; exports.uniMainJsPlugin = void 0;
const path_1 = __importDefault(require("path")); const path_1 = __importDefault(require("path"));
const slash_1 = __importDefault(require("slash"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const utils_1 = require("../utils"); const utils_1 = require("../utils");
function uniMainJsPlugin() { function uniMainJsPlugin() {
...@@ -16,7 +15,7 @@ function uniMainJsPlugin() { ...@@ -16,7 +15,7 @@ function uniMainJsPlugin() {
name: 'vite:uni-h5-main-js', name: 'vite:uni-h5-main-js',
enforce: 'pre', enforce: 'pre',
configResolved(config) { configResolved(config) {
pagesJsonJsPath = slash_1.default(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'pages.json.js')); pagesJsonJsPath = uni_cli_shared_1.normalizePath(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'pages.json.js'));
isSSR = isSSR =
utils_1.isSsr(config.command, config) || utils_1.isSsrManifest(config.command, config); utils_1.isSsr(config.command, config) || utils_1.isSsrManifest(config.command, config);
}, },
......
...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { ...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.uniPagesJsonPlugin = void 0; exports.uniPagesJsonPlugin = void 0;
const path_1 = __importDefault(require("path")); const path_1 = __importDefault(require("path"));
const slash_1 = __importDefault(require("slash"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const pkg = require('@dcloudio/vite-plugin-uni/package.json'); const pkg = require('@dcloudio/vite-plugin-uni/package.json');
function uniPagesJsonPlugin() { function uniPagesJsonPlugin() {
...@@ -34,7 +33,7 @@ function generatePagesJsonCode(ssr, jsonStr, config) { ...@@ -34,7 +33,7 @@ function generatePagesJsonCode(ssr, jsonStr, config) {
const definePagesCode = generatePagesDefineCode(pagesJson, config); const definePagesCode = generatePagesDefineCode(pagesJson, config);
const uniRoutesCode = generateRoutes(globalName, pagesJson, config); const uniRoutesCode = generateRoutes(globalName, pagesJson, config);
const uniConfigCode = generateConfig(globalName, pagesJson, config); const uniConfigCode = generateConfig(globalName, pagesJson, config);
const manifestJsonPath = slash_1.default(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'manifest.json.js')); const manifestJsonPath = uni_cli_shared_1.normalizePath(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'manifest.json.js'));
const cssCode = generateCssCode(config); const cssCode = generateCssCode(config);
return ` return `
import { defineAsyncComponent, resolveComponent, createVNode, withCtx, openBlock, createBlock } from 'vue' import { defineAsyncComponent, resolveComponent, createVNode, withCtx, openBlock, createBlock } from 'vue'
......
...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) { ...@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.uniSetupPlugin = void 0; exports.uniSetupPlugin = void 0;
const path_1 = __importDefault(require("path")); const path_1 = __importDefault(require("path"));
const slash_1 = __importDefault(require("slash"));
const debug_1 = __importDefault(require("debug")); const debug_1 = __importDefault(require("debug"));
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const debugSetup = debug_1.default('vite:uni:setup'); const debugSetup = debug_1.default('vite:uni:setup');
...@@ -14,7 +13,7 @@ function uniSetupPlugin() { ...@@ -14,7 +13,7 @@ function uniSetupPlugin() {
return { return {
name: 'vite:uni-setup', name: 'vite:uni-setup',
configResolved() { configResolved() {
appVuePath = slash_1.default(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'App.vue')); appVuePath = uni_cli_shared_1.normalizePath(path_1.default.resolve(process.env.UNI_INPUT_DIR, 'App.vue'));
}, },
transform(code, id) { transform(code, id) {
const { filename, query } = uni_cli_shared_1.parseVueRequest(id); const { filename, query } = uni_cli_shared_1.parseVueRequest(id);
......
import path from 'path' import path from 'path'
import debug from 'debug' import debug from 'debug'
import slash from 'slash'
import { ModuleGraph, Plugin } from 'vite' import { ModuleGraph, Plugin } from 'vite'
import { extend } from '@vue/shared' import { extend } from '@vue/shared'
import { import {
initEasycomsOnce, initEasycomsOnce,
normalizePath,
parseManifestJson, parseManifestJson,
parsePagesJson, parsePagesJson,
} from '@dcloudio/uni-cli-shared' } from '@dcloudio/uni-cli-shared'
...@@ -14,7 +14,7 @@ import { initFeatures } from '../utils' ...@@ -14,7 +14,7 @@ import { initFeatures } from '../utils'
const debugHmr = debug('vite:uni:hmr') const debugHmr = debug('vite:uni:hmr')
async function invalidate(file: string, moduleGraph: ModuleGraph) { async function invalidate(file: string, moduleGraph: ModuleGraph) {
const mods = await moduleGraph.getModulesByFile(slash(file)) const mods = await moduleGraph.getModulesByFile(normalizePath(file))
if (mods && mods.size) { if (mods && mods.size) {
;[...mods].forEach((mod) => { ;[...mods].forEach((mod) => {
debugHmr('invalidate', mod.id) debugHmr('invalidate', mod.id)
......
import path from 'path' import path from 'path'
import slash from 'slash' import { defineUniMainJsPlugin, normalizePath } from '@dcloudio/uni-cli-shared'
import { defineUniMainJsPlugin } from '@dcloudio/uni-cli-shared'
import { isSsr, isSsrManifest } from '../utils' import { isSsr, isSsrManifest } from '../utils'
export function uniMainJsPlugin() { export function uniMainJsPlugin() {
...@@ -11,7 +10,7 @@ export function uniMainJsPlugin() { ...@@ -11,7 +10,7 @@ export function uniMainJsPlugin() {
name: 'vite:uni-h5-main-js', name: 'vite:uni-h5-main-js',
enforce: 'pre', enforce: 'pre',
configResolved(config) { configResolved(config) {
pagesJsonJsPath = slash( pagesJsonJsPath = normalizePath(
path.resolve(process.env.UNI_INPUT_DIR, 'pages.json.js') path.resolve(process.env.UNI_INPUT_DIR, 'pages.json.js')
) )
isSSR = isSSR =
......
import path from 'path' import path from 'path'
import slash from 'slash'
import { Plugin, ResolvedConfig } from 'vite' import { Plugin, ResolvedConfig } from 'vite'
import { import {
API_DEPS_CSS, API_DEPS_CSS,
...@@ -11,6 +10,7 @@ import { ...@@ -11,6 +10,7 @@ import {
defineUniPagesJsonPlugin, defineUniPagesJsonPlugin,
normalizePagesRoute, normalizePagesRoute,
normalizePagePath, normalizePagePath,
normalizePath,
} from '@dcloudio/uni-cli-shared' } from '@dcloudio/uni-cli-shared'
const pkg = require('@dcloudio/vite-plugin-uni/package.json') const pkg = require('@dcloudio/vite-plugin-uni/package.json')
...@@ -47,7 +47,7 @@ function generatePagesJsonCode( ...@@ -47,7 +47,7 @@ function generatePagesJsonCode(
const definePagesCode = generatePagesDefineCode(pagesJson, config) const definePagesCode = generatePagesDefineCode(pagesJson, config)
const uniRoutesCode = generateRoutes(globalName, pagesJson, config) const uniRoutesCode = generateRoutes(globalName, pagesJson, config)
const uniConfigCode = generateConfig(globalName, pagesJson, config) const uniConfigCode = generateConfig(globalName, pagesJson, config)
const manifestJsonPath = slash( const manifestJsonPath = normalizePath(
path.resolve(process.env.UNI_INPUT_DIR, 'manifest.json.js') path.resolve(process.env.UNI_INPUT_DIR, 'manifest.json.js')
) )
const cssCode = generateCssCode(config) const cssCode = generateCssCode(config)
......
import path from 'path' import path from 'path'
import slash from 'slash'
import debug from 'debug' import debug from 'debug'
import { Plugin } from 'vite' import { Plugin } from 'vite'
import { parseVueRequest } from '@dcloudio/uni-cli-shared' import { normalizePath, parseVueRequest } from '@dcloudio/uni-cli-shared'
const debugSetup = debug('vite:uni:setup') const debugSetup = debug('vite:uni:setup')
...@@ -11,7 +10,9 @@ export function uniSetupPlugin(): Plugin { ...@@ -11,7 +10,9 @@ export function uniSetupPlugin(): Plugin {
return { return {
name: 'vite:uni-setup', name: 'vite:uni-setup',
configResolved() { configResolved() {
appVuePath = slash(path.resolve(process.env.UNI_INPUT_DIR, 'App.vue')) appVuePath = normalizePath(
path.resolve(process.env.UNI_INPUT_DIR, 'App.vue')
)
}, },
transform(code, id) { transform(code, id) {
const { filename, query } = parseVueRequest(id) const { filename, query } = parseVueRequest(id)
......
...@@ -31,8 +31,7 @@ ...@@ -31,8 +31,7 @@
"jsonc-parser": "^3.0.0", "jsonc-parser": "^3.0.0",
"mime": "^2.5.2", "mime": "^2.5.2",
"module-alias": "^2.2.2", "module-alias": "^2.2.2",
"postcss-selector-parser": "^6.0.4", "postcss-selector-parser": "^6.0.4"
"slash": "^3.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/express": "^4.17.12", "@types/express": "^4.17.12",
......
import path from 'path' import path from 'path'
import slash from 'slash'
import { UserConfig } from 'vite' import { UserConfig } from 'vite'
import { initEasycomsOnce } from '@dcloudio/uni-cli-shared' import { initEasycomsOnce, normalizePath } from '@dcloudio/uni-cli-shared'
import { VitePluginUniResolvedOptions } from '..' import { VitePluginUniResolvedOptions } from '..'
export function createBuild( export function createBuild(
...@@ -18,7 +17,7 @@ export function createBuild( ...@@ -18,7 +17,7 @@ export function createBuild(
path.dirname(chunkInfo.facadeModuleId) path.dirname(chunkInfo.facadeModuleId)
) )
if (dirname) { if (dirname) {
return `${options.assetsDir}/${slash(dirname).replace( return `${options.assetsDir}/${normalizePath(dirname).replace(
/\//g, /\//g,
'-' '-'
)}-[name].[hash].js` )}-[name].[hash].js`
......
import path from 'path' import path from 'path'
import { UserConfig } from 'vite' import { UserConfig } from 'vite'
import { EXTNAME_VUE } from '@dcloudio/uni-cli-shared' import { isWindows, EXTNAME_VUE } from '@dcloudio/uni-cli-shared'
import { VitePluginUniResolvedOptions } from '..' import { VitePluginUniResolvedOptions } from '..'
export function customResolver(updatedId: string) {
if (isWindows) {
return path.resolve(process.env.UNI_INPUT_DIR, updatedId)
}
return updatedId
}
export function createResolve( export function createResolve(
options: VitePluginUniResolvedOptions, options: VitePluginUniResolvedOptions,
_config: UserConfig _config: UserConfig
...@@ -17,6 +24,7 @@ export function createResolve( ...@@ -17,6 +24,7 @@ export function createResolve(
replacement(_str: string, _$1: string, $2: string) { replacement(_str: string, _$1: string, $2: string) {
return path.resolve(options.inputDir, $2) return path.resolve(options.inputDir, $2)
}, },
customResolver,
}, },
], ],
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'].concat( extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'].concat(
......
import { Plugin, ResolvedConfig } from 'vite' import { Plugin, ResolvedConfig } from 'vite'
import { formatMsg, checkUpdate } from '@dcloudio/uni-cli-shared' import { formatMsg, checkUpdate, isWindows } from '@dcloudio/uni-cli-shared'
import { VitePluginUniResolvedOptions } from '..' import { VitePluginUniResolvedOptions } from '..'
import { initEnv } from './env' import { initEnv } from './env'
import { initOptions } from './options' import { initOptions } from './options'
import { initPlugins } from './plugins' import { initPlugins } from './plugins'
import { customResolver } from '../config/resolve'
export function createConfigResolved(options: VitePluginUniResolvedOptions) { export function createConfigResolved(options: VitePluginUniResolvedOptions) {
return ((config) => { return ((config) => {
...@@ -13,6 +14,15 @@ export function createConfigResolved(options: VitePluginUniResolvedOptions) { ...@@ -13,6 +14,15 @@ export function createConfigResolved(options: VitePluginUniResolvedOptions) {
initOptions(options, config) initOptions(options, config)
initPlugins(config, options) initPlugins(config, options)
initCheckUpdate() initCheckUpdate()
if (isWindows) {
// TODO 等 https://github.com/vitejs/vite/issues/3331 修复后,可以移除下列代码
const item = config.resolve.alias.find((item) =>
typeof item.find !== 'string' ? item.find.test('@') : false
)
if (item) {
item.customResolver = customResolver
}
}
}) as Plugin['configResolved'] }) as Plugin['configResolved']
} }
......
import path from 'path' import path from 'path'
import slash from 'slash'
import { Plugin } from 'vite' import { Plugin } from 'vite'
import { PUBLIC_DIR, uniViteCopyPlugin } from '@dcloudio/uni-cli-shared' import {
normalizePath,
PUBLIC_DIR,
uniViteCopyPlugin,
} from '@dcloudio/uni-cli-shared'
import { VitePluginUniResolvedOptions } from '../..' import { VitePluginUniResolvedOptions } from '../..'
export function uniCopyPlugin({ export function uniCopyPlugin({
...@@ -12,11 +15,13 @@ export function uniCopyPlugin({ ...@@ -12,11 +15,13 @@ export function uniCopyPlugin({
return uniViteCopyPlugin({ return uniViteCopyPlugin({
targets: [ targets: [
{ {
src: slash(path.resolve(inputDir, PUBLIC_DIR)), src: normalizePath(path.resolve(inputDir, PUBLIC_DIR)),
dest: outputDir, dest: outputDir,
}, },
{ {
src: slash(path.resolve(inputDir, 'uni_modules/*/' + PUBLIC_DIR)), src: normalizePath(
path.resolve(inputDir, 'uni_modules/*/' + PUBLIC_DIR)
),
dest: outputDir, dest: outputDir,
rename: (_name, _extension, fullPath) => { rename: (_name, _extension, fullPath) => {
return path.relative(inputDir, fullPath) return path.relative(inputDir, fullPath)
......
import path from 'path' import path from 'path'
import slash from 'slash'
import { Plugin } from 'vite' import { Plugin } from 'vite'
import { parse } from 'jsonc-parser' import { parse } from 'jsonc-parser'
import { normalizePath } from '@dcloudio/uni-cli-shared'
import { VitePluginUniResolvedOptions } from '../..' import { VitePluginUniResolvedOptions } from '../..'
export function uniJsonPlugin(options: VitePluginUniResolvedOptions): Plugin { export function uniJsonPlugin(options: VitePluginUniResolvedOptions): Plugin {
const pagesJsonPath = slash(path.resolve(options.inputDir, 'pages.json')) const pagesJsonPath = normalizePath(
const manifestJsonPath = slash( path.resolve(options.inputDir, 'pages.json')
)
const manifestJsonPath = normalizePath(
path.resolve(options.inputDir, 'manifest.json') path.resolve(options.inputDir, 'manifest.json')
) )
return { return {
......
import slash from 'slash'
import { Plugin } from 'vite' import { Plugin } from 'vite'
import { normalizePath } from '@dcloudio/uni-cli-shared'
import { VitePluginUniResolvedOptions } from '..' import { VitePluginUniResolvedOptions } from '..'
export function createResolveId( export function createResolveId(
options: VitePluginUniResolvedOptions options: VitePluginUniResolvedOptions
): Plugin['resolveId'] { ): Plugin['resolveId'] {
const inputDir = slash(options.inputDir) const inputDir = normalizePath(options.inputDir)
return function (id) { return function (id) {
if (id.startsWith('@/')) { if (id.startsWith('@/')) {
return inputDir + id.substr(1) return inputDir + id.substr(1)
......
import path from 'path' import path from 'path'
import slash from 'slash'
import { createFilter } from '@rollup/pluginutils' import { createFilter } from '@rollup/pluginutils'
import { PUBLIC_DIR } from '@dcloudio/uni-cli-shared' import { normalizePath, PUBLIC_DIR } from '@dcloudio/uni-cli-shared'
export function createPublicFileFilter(base: string = '/') { export function createPublicFileFilter(base: string = '/') {
const publicDir = slash(path.join(base, PUBLIC_DIR + '/**/*')) const publicDir = normalizePath(path.join(base, PUBLIC_DIR + '/**/*'))
const uniModulesDir = slash( const uniModulesDir = normalizePath(
path.join(base, 'uni_modules/*/' + PUBLIC_DIR + '/**/*') path.join(base, 'uni_modules/*/' + PUBLIC_DIR + '/**/*')
) )
return createFilter([publicDir, uniModulesDir]) return createFilter([publicDir, uniModulesDir])
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册