next.js/packages/next/src/build/webpack-config-rules/resolve.ts
resolve.ts31 lines933 B
import {
  COMPILER_NAMES,
  type CompilerNameValues,
} from '../../shared/lib/constants'

export const edgeConditionName = 'edge-light'

const mainFieldsPerCompiler = {
  // For default case, prefer CJS over ESM on server side. e.g. pages dir SSR
  [COMPILER_NAMES.server]: ['main', 'module'],
  [COMPILER_NAMES.client]: ['browser', 'module', 'main'],
  // For bundling-all strategy, prefer ESM over CJS
  'server-esm': ['module', 'main'],
}

export function getMainField(
  compilerType: CompilerNameValues,
  preferEsm: boolean
) {
  if (compilerType === COMPILER_NAMES.edgeServer) {
    return ['edge-light', '...']
  } else if (compilerType === COMPILER_NAMES.client) {
    return mainFieldsPerCompiler[COMPILER_NAMES.client]
  }

  // Prefer module fields over main fields for isomorphic packages on server layer
  return preferEsm
    ? mainFieldsPerCompiler['server-esm']
    : mainFieldsPerCompiler[COMPILER_NAMES.server]
}
Quest for Codev2.0.0
/
SIGN IN