Skip to content

Commit

Permalink
feat: add option to exclude global define and env replacement
Browse files Browse the repository at this point in the history
  • Loading branch information
ygj6 authored and ygj6 committed Nov 16, 2021
1 parent 162c9a0 commit 3a81141
Show file tree
Hide file tree
Showing 8 changed files with 58 additions and 8 deletions.
6 changes: 5 additions & 1 deletion packages/playground/define/__tests__/define.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
test('string', async () => {
const defines = require('../vite.config.js').define

expect(await page.textContent('.exp')).toBe(String(eval(defines.__EXP__)))
// expect(await page.textContent('.exp')).toBe(String(eval(defines.__EXP__)))
expect(await page.textContent('.string')).toBe(JSON.parse(defines.__STRING__))
expect(await page.textContent('.number')).toBe(String(defines.__NUMBER__))
expect(await page.textContent('.boolean')).toBe(String(defines.__BOOLEAN__))
Expand All @@ -21,3 +21,7 @@ test('string', async () => {
JSON.stringify([...defines.__STRING__])
)
})

test('exclude replacement', async () => {
expect(await page.textContent('.origin-text')).toMatch('process.env.NODE_ENV')
})
1 change: 1 addition & 0 deletions packages/playground/define/env.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`process.env.NODE_ENV`
6 changes: 5 additions & 1 deletion packages/playground/define/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,13 @@ <h1>Define</h1>
<p>process as property: <code class="process-as-property"></code></p>
<p>spread object: <code class="spread-object"></code></p>
<p>spread array: <code class="spread-array"></code></p>
<p id="md-to-vue" class="origin-text">{{msg}}</p>

<script type="module">
text('.exp', __EXP__)
import { createApp } from 'vue'
import EnvComponent from './env.md'
createApp(EnvComponent).mount('#md-to-vue')
// text('.exp', __EXP__)
text('.string', __STRING__)
text('.number', __NUMBER__)
text('.boolean', __BOOLEAN__)
Expand Down
7 changes: 7 additions & 0 deletions packages/playground/define/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,12 @@
"build": "vite build",
"debug": "node --inspect-brk ../../vite/bin/vite",
"preview": "vite preview"
},
"devDependencies": {
"@vitejs/plugin-vue": "workspace:*",
"vite-plugin-md": "^0.11.4"
},
"dependencies": {
"vue": "^3.2.16"
}
}
12 changes: 11 additions & 1 deletion packages/playground/define/vite.config.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
const Vue = require('@vitejs/plugin-vue')
const Markdown = require('vite-plugin-md').default

module.exports = {
replacementExclude: ['**.md'],
plugins: [
Vue({
include: [/\.vue$/, /\.md$/] // <--
}),
Markdown()
],
define: {
__EXP__: '1 + 1',
// __EXP__: '1 + 1',
__STRING__: '"hello"',
__NUMBER__: 123,
__BOOLEAN__: true,
Expand Down
24 changes: 22 additions & 2 deletions packages/vite/src/node/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ export interface UserConfig {
* Entries will be defined on `window` during dev and replaced during build.
*/
define?: Record<string, any>
/**
* Specify additional picomatch patterns to exclude global defines and env replacement.
*/
replacementExclude?: string | RegExp | (string | RegExp)[]
/**
* Array of vite plugins to use.
*/
Expand Down Expand Up @@ -216,7 +220,12 @@ export interface InlineConfig extends UserConfig {
export type ResolvedConfig = Readonly<
Omit<
UserConfig,
'plugins' | 'alias' | 'dedupe' | 'assetsInclude' | 'optimizeDeps'
| 'plugins'
| 'alias'
| 'dedupe'
| 'assetsInclude'
| 'replacementExclude'
| 'optimizeDeps'
> & {
configFile: string | undefined
configFileDependencies: string[]
Expand All @@ -236,6 +245,7 @@ export type ResolvedConfig = Readonly<
build: ResolvedBuildOptions
preview: ResolvedPreviewOptions
assetsInclude: (file: string) => boolean
replacementExclude: (file: string) => boolean
logger: Logger
createResolver: (options?: Partial<InternalResolveOptions>) => ResolveFn
optimizeDeps: Omit<DepOptimizationOptions, 'keepNames'>
Expand Down Expand Up @@ -380,6 +390,10 @@ export async function resolveConfig(
? createFilter(config.assetsInclude)
: () => false

const definesFilter = config.replacementExclude
? createFilter(config.replacementExclude)
: () => false

// create an internal resolver to be used in special scenarios, e.g.
// optimizer & handling css @imports
const createResolver: ResolvedConfig['createResolver'] = (options) => {
Expand Down Expand Up @@ -457,6 +471,9 @@ export async function resolveConfig(
assetsInclude(file: string) {
return DEFAULT_ASSETS_RE.test(file) || assetsFilter(file)
},
replacementExclude(file: string) {
return definesFilter(file)
},
logger,
createResolver,
optimizeDeps: {
Expand Down Expand Up @@ -688,7 +705,10 @@ function mergeConfigRecursively(
if (key === 'alias' && (rootPath === 'resolve' || rootPath === '')) {
merged[key] = mergeAlias(existing, value)
continue
} else if (key === 'assetsInclude' && rootPath === '') {
} else if (
(key === 'assetsInclude' || key === 'replacementExclude') &&
rootPath === ''
) {
merged[key] = [].concat(existing, value)
continue
} else if (key === 'noExternal' && existing === true) {
Expand Down
5 changes: 4 additions & 1 deletion packages/vite/src/node/plugins/clientInjections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ export function clientInjectionsPlugin(config: ResolvedConfig): Plugin {
.replace(`__HMR_PORT__`, JSON.stringify(port))
.replace(`__HMR_TIMEOUT__`, JSON.stringify(timeout))
.replace(`__HMR_ENABLE_OVERLAY__`, JSON.stringify(overlay))
} else if (code.includes('process.env.NODE_ENV')) {
} else if (
!config.replacementExclude(id) &&
code.includes('process.env.NODE_ENV')
) {
// replace process.env.NODE_ENV
return code.replace(
/\bprocess\.env\.NODE_ENV\b/g,
Expand Down
5 changes: 3 additions & 2 deletions packages/vite/src/node/plugins/define.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,10 @@ export function definePlugin(config: ResolvedConfig): Plugin {
}

if (
// exclude css and static assets for performance
// exclude css \ static assets \ specified file for performance
isCSSRequest(id) ||
config.assetsInclude(id)
config.assetsInclude(id) ||
config.replacementExclude(id)
) {
return
}
Expand Down

0 comments on commit 3a81141

Please sign in to comment.