|
1 | 1 | export { commonConfig }
|
2 | 2 |
|
3 | 3 | import type { Plugin, ResolvedConfig } from 'vite'
|
4 |
| -import { assert, assertWarning, isValidPathAlias } from '../utils.js' |
| 4 | +import { assert, assertWarning, findUserPackageJsonPath, isValidPathAlias } from '../utils.js' |
5 | 5 | import { assertRollupInput } from './buildConfig.js'
|
6 | 6 | import { installRequireShim_setUserRootDir } from '@brillout/require-shim'
|
| 7 | +import pc from '@brillout/picocolors' |
| 8 | +import path from 'path' |
| 9 | +import { createRequire } from 'module' |
| 10 | +// @ts-ignore Shimed by dist-cjs-fixup.js for CJS build. |
| 11 | +const importMetaUrl: string = import.meta.url |
| 12 | +const require_ = createRequire(importMetaUrl) |
7 | 13 |
|
8 | 14 | function commonConfig(): Plugin[] {
|
9 | 15 | return [
|
@@ -31,6 +37,7 @@ function commonConfig(): Plugin[] {
|
31 | 37 | workaroundCI(config)
|
32 | 38 | assertRollupInput(config)
|
33 | 39 | assertResolveAlias(config)
|
| 40 | + assertEsm(config.root) |
34 | 41 | }
|
35 | 42 | }
|
36 | 43 | }
|
@@ -98,3 +105,21 @@ function getAliases(config: ResolvedConfig) {
|
98 | 105 | return alias
|
99 | 106 | }
|
100 | 107 | }
|
| 108 | + |
| 109 | +function assertEsm(userViteRoot: string) { |
| 110 | + const packageJsonPath = findUserPackageJsonPath(userViteRoot) |
| 111 | + if (!packageJsonPath) return |
| 112 | + const packageJson = require_(packageJsonPath) |
| 113 | + let dir = path.dirname(packageJsonPath) |
| 114 | + if (dir !== '/') { |
| 115 | + assert(!dir.endsWith('/')) |
| 116 | + dir = dir + '/' |
| 117 | + } |
| 118 | + assert(dir.endsWith('/')) |
| 119 | + dir = pc.dim(dir) |
| 120 | + assertWarning( |
| 121 | + packageJson.type === 'module', |
| 122 | + `We recommend setting ${dir}package.json#type to "module" (and therefore writing ESM code instead of CJS code), see https://vite-plugin-ssr.com/CJS`, |
| 123 | + { onlyOnce: true } |
| 124 | + ) |
| 125 | +} |
0 commit comments