From 03b323d39cafe2baabef74e6051a9640add82590 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 9 Feb 2021 15:13:47 -0500 Subject: [PATCH] fix: fix path normalization for windows paths w/ non ascii chars fix #1384 --- packages/vite/package.json | 1 - packages/vite/rollup.config.js | 3 +-- packages/vite/src/node/plugins/html.ts | 9 +++++++-- packages/vite/src/node/plugins/resolve.ts | 4 ++-- packages/vite/src/node/server/hmr.ts | 5 ++--- packages/vite/src/node/utils.ts | 5 ++++- 6 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/vite/package.json b/packages/vite/package.json index 5fce05f414ba2a..8ca51ff56af751 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -115,7 +115,6 @@ "rollup-plugin-license": "^2.2.0", "selfsigned": "^1.10.8", "sirv": "^1.0.10", - "slash": "^3.0.0", "source-map": "^0.6.1", "source-map-support": "^0.5.19", "strip-ansi": "^6.0.0", diff --git a/packages/vite/rollup.config.js b/packages/vite/rollup.config.js index db1fbae51be237..378242bfb6657e 100644 --- a/packages/vite/rollup.config.js +++ b/packages/vite/rollup.config.js @@ -1,7 +1,6 @@ // @ts-check import fs from 'fs' import path from 'path' -import slash from 'slash' import nodeResolve from '@rollup/plugin-node-resolve' import typescript from '@rollup/plugin-typescript' import commonjs from '@rollup/plugin-commonjs' @@ -188,7 +187,7 @@ function shimDepsPlugin(deps) { name: 'shim-deps', transform(code, id) { for (const file in deps) { - if (slash(id).endsWith(file)) { + if (id.replace(/\\/g, '/').endsWith(file)) { const { src, replacement, pattern } = deps[file] const magicString = new MagicString(code) diff --git a/packages/vite/src/node/plugins/html.ts b/packages/vite/src/node/plugins/html.ts index 8ae5e2127bad0a..62474b09de4cfa 100644 --- a/packages/vite/src/node/plugins/html.ts +++ b/packages/vite/src/node/plugins/html.ts @@ -3,9 +3,14 @@ import path from 'path' import { Plugin } from '../plugin' import { ViteDevServer } from '../server' import { OutputAsset, OutputBundle, OutputChunk } from 'rollup' -import { cleanUrl, isExternalUrl, isDataUrl, generateCodeFrame } from '../utils' +import { + slash, + cleanUrl, + isExternalUrl, + isDataUrl, + generateCodeFrame +} from '../utils' import { ResolvedConfig } from '../config' -import slash from 'slash' import MagicString from 'magic-string' import { checkPublicFile, diff --git a/packages/vite/src/node/plugins/resolve.ts b/packages/vite/src/node/plugins/resolve.ts index a14bdf0cb8941c..aedc391eb2979b 100644 --- a/packages/vite/src/node/plugins/resolve.ts +++ b/packages/vite/src/node/plugins/resolve.ts @@ -21,10 +21,10 @@ import { ensureVolumeInPath, resolveFrom, isDataUrl, - cleanUrl + cleanUrl, + slash } from '../utils' import { ViteDevServer } from '..' -import slash from 'slash' import { createFilter } from '@rollup/pluginutils' import { PartialResolvedId } from 'rollup' import { resolve as _resolveExports } from 'resolve.exports' diff --git a/packages/vite/src/node/server/hmr.ts b/packages/vite/src/node/server/hmr.ts index 5ba27c3c8b68dd..9ed0d85f2f6a83 100644 --- a/packages/vite/src/node/server/hmr.ts +++ b/packages/vite/src/node/server/hmr.ts @@ -1,10 +1,9 @@ import fs from 'fs' import path from 'path' +import chalk from 'chalk' import { createServer, ViteDevServer } from '..' import { createDebugger, normalizePath } from '../utils' import { ModuleNode } from './moduleGraph' -import chalk from 'chalk' -import slash from 'slash' import { Update } from 'types/hmrPayload' import { CLIENT_DIR } from '../constants' import { RollupError } from 'rollup' @@ -96,7 +95,7 @@ export async function handleHMRUpdate( type: 'full-reload', path: config.server.middlewareMode ? '*' - : '/' + slash(path.relative(config.root, file)) + : '/' + normalizePath(path.relative(config.root, file)) }) } else { // loaded but not in the module graph, probably not js diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 00d8111879215c..06ab55b4700d56 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -4,12 +4,15 @@ import fs from 'fs' import os from 'os' import path from 'path' import { parse as parseUrl } from 'url' -import slash from 'slash' import { FS_PREFIX, SUPPORTED_EXTS } from './constants' import resolve from 'resolve' import builtins from 'builtin-modules' import { FSWatcher } from 'chokidar' +export function slash(p: string): string { + return p.replace(/\\/g, '/') +} + export const flattenId = (id: string) => id.replace(/[\/\.]/g, '_') export function isBuiltin(id: string): boolean {