Skip to content

Commit d62bfc4

Browse files
authored
improvement: tweak alias transpile option for production (#17)
1 parent 049d36b commit d62bfc4

File tree

3 files changed

+56
-39
lines changed

3 files changed

+56
-39
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
"build": "cd packages/nuxt3 && yarn build",
6666
"build:play": "cd packages/playground && yarn build",
6767
"play": "cd packages/playground && yarn dev",
68+
"start": "cd packages/playground && yarn start",
6869
"fix": "run-p lint:fix format:fix",
6970
"format:fix": "run-p \"format:prettier -- --write\"",
7071
"format:prettier": "prettier --config .prettierrc --ignore-path .prettierignore '**/*.{js,json,html}'",

packages/nuxt3/src/module.ts

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { promises as fs, existsSync } from 'fs'
1111
import { isString } from '@intlify/shared'
1212
import VitePlugin from '@intlify/vite-plugin-vue-i18n'
1313
import { distDir } from './dirs'
14-
import { resolveLocales, isViteMode } from './utils'
14+
import { resolveLocales, isViteMode, setupAliasTranspileOptions } from './utils'
1515

1616
import type { I18nOptions } from 'vue-i18n'
1717

@@ -38,50 +38,36 @@ export function defineVueI18n(options: I18nOptions): I18nOptions {
3838
return options
3939
}
4040

41+
const MODULE_DEV_ENTRIES = {
42+
'@intlify/shared': '@intlify/shared/dist/shared.esm-bundler.js',
43+
'@intlify/core-base': '@intlify/core-base/dist/core-base.esm-bundler.js',
44+
'@vue/devtools-api': '@vue/devtools-api/lib/esm/index.js',
45+
'@intlify/devtools-if':
46+
'@intlify/devtools-if/dist/devtools-if.esm-bundler.js',
47+
'vue-i18n': 'vue-i18n/dist/vue-i18n.esm-bundler.js'
48+
}
49+
50+
const MODULE_PROD_ENTRIES = {
51+
'@intlify/shared': '@intlify/shared/dist/shared.esm-bundler.js',
52+
'@intlify/core-base': '@intlify/core-base/dist/core-base.esm-bundler.js',
53+
'@vue/devtools-api': '@vue/devtools-api/lib/esm/index.js',
54+
'@intlify/devtools-if':
55+
'@intlify/devtools-if/dist/devtools-if.esm-bundler.js',
56+
'vue-i18n': 'vue-i18n/dist/vue-i18n.runtime.esm-bundler.js'
57+
}
58+
4159
const IntlifyModule = defineNuxtModule<IntlifyModuleOptions>({
4260
name: '@intlify/nuxt3',
4361
configKey: 'intlify',
4462
defaults: {},
4563
async setup(options, nuxt) {
4664
const _require = createRequire(import.meta.url)
4765

48-
const intlifySharedEntry = _require.resolve(
49-
'@intlify/shared/dist/shared.esm-bundler.js'
50-
)
51-
nuxt.options.alias['@intlify/shared'] = intlifySharedEntry
52-
isViteMode(nuxt.options) &&
53-
nuxt.options.build.transpile.push('@intlify/shared')
54-
55-
// TODO: should use runtime-only for production
56-
const intlifyCoreBaseEntry = _require.resolve(
57-
'@intlify/core-base/dist/core-base.esm-bundler.js'
58-
)
59-
nuxt.options.alias['@intlify/core-base'] = intlifyCoreBaseEntry
60-
isViteMode(nuxt.options) &&
61-
nuxt.options.build.transpile.push('@intlify/core-base')
62-
63-
// TODO: should not set vue-devtools for production
64-
const vueDevtoolsApiEntry = _require.resolve(
65-
'@vue/devtools-api/lib/esm/index.js'
66-
)
67-
nuxt.options.alias['@vue/devtools-api'] = vueDevtoolsApiEntry
68-
isViteMode(nuxt.options) &&
69-
nuxt.options.build.transpile.push('@vue/devtools-api')
70-
71-
// TODO: should not set vue-devtools for production
72-
const intlifyDevtoolsIfEntry = _require.resolve(
73-
'@intlify/devtools-if/dist/devtools-if.esm-bundler.js'
74-
)
75-
nuxt.options.alias['@intlify/devtools-if'] = intlifyDevtoolsIfEntry
76-
isViteMode(nuxt.options) &&
77-
nuxt.options.build.transpile.push('@intlify/devtools-if')
78-
79-
// TODO: should use runtime-only for production
80-
const vueI18nEntry = _require.resolve(
81-
'vue-i18n/dist/vue-i18n.esm-bundler.js'
82-
)
83-
nuxt.options.alias['vue-i18n'] = vueI18nEntry
84-
isViteMode(nuxt.options) && nuxt.options.build.transpile.push('vue-i18n')
66+
for (const [name, entry] of Object.entries(
67+
nuxt.options.dev ? MODULE_DEV_ENTRIES : MODULE_PROD_ENTRIES
68+
)) {
69+
setupAliasTranspileOptions(nuxt, name, _require.resolve(entry))
70+
}
8571

8672
const localeDir = options.localeDir || 'locales'
8773
const localePath = resolve(nuxt.options.srcDir, localeDir)
@@ -154,10 +140,31 @@ export default { ${[...importMapper].map(i => `${JSON.stringify(i[0])}:${i[1]}`)
154140
type: 'javascript/auto',
155141
loader: '@intlify/vue-i18n-loader'
156142
})
143+
144+
if (!nuxt.options.dev) {
145+
// @ts-ignore TODO
146+
;(config.resolve?.alias as any)['vue-i18n'] =
147+
'vue-i18n/dist/vue-i18n.runtime.esm-bundler.js'
148+
}
149+
150+
// TODO: unplugin implementation
151+
// config.plugins?.push(webpack.DefinePlugin, [
152+
// {
153+
// __VUE_I18N_LEGACY_API__: legacyApiFlag,
154+
// __VUE_I18N_FULL_INSTALL__: installFlag,
155+
// __VUE_I18N_PROD_DEVTOOLS__: 'false'
156+
// }
157+
// ])
157158
})
158159

159160
// install @intlify/vite-plugin-vue-i18n
160161
extendViteConfig(config => {
162+
// TODO: unplugin implementation
163+
if (!nuxt.options.dev) {
164+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
165+
;(config.resolve?.alias as any)['vue-i18n'] =
166+
'vue-i18n/dist/vue-i18n.runtime.esm-bundler.js'
167+
}
161168
// eslint-disable-next-line @typescript-eslint/no-explicit-any
162169
const viteOptions: any = {
163170
compositionOnly: false

packages/nuxt3/src/utils.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { resolveFiles } from '@nuxt/kit'
22
import { parse } from 'pathe'
33
import { isBoolean, isObject } from '@intlify/shared'
44

5-
import type { NuxtOptions } from '@nuxt/kit'
5+
import type { NuxtOptions, Nuxt } from '@nuxt/kit'
66

77
export type LocaleInfo = {
88
locale: string
@@ -18,6 +18,15 @@ export function isViteMode(options: NuxtOptions): boolean {
1818
: true
1919
}
2020

21+
export function setupAliasTranspileOptions(
22+
nuxt: Nuxt,
23+
name: string,
24+
entry: string
25+
): void {
26+
nuxt.options.alias[name] = entry
27+
isViteMode(nuxt.options) && nuxt.options.build.transpile.push(name)
28+
}
29+
2130
export async function resolveLocales(path: string): Promise<LocaleInfo[]> {
2231
const files = await resolveFiles(path, '**/*{json,json5,yaml,yml}')
2332
return files.map(file => {

0 commit comments

Comments
 (0)