You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从外部目录导入常量到React客户端并避免process未定义错误?

问题描述

项目结构:

home
├── server
│   ├── package.json
│   └── src
│        └── constants.js
└── client
    ├── package.json
    └── src
         └── index.js

server/src/constants.js 代码:

export const test = 'hello'

在client/src/index.js中尝试导入:

import { test } from '../../server/src/constants.js'

浏览器控制台报错:

Uncaught ReferenceError: process is not defined
at ../server/node_modules/dotenv/lib/env-options.js

推测是跨目录导入触发了server端的dotenv依赖,导致React编译报错,需求是不通过API传递常量,找到直接共享的解决方案。


解决方法

1. 新建共享公共目录

在项目根目录创建shared文件夹,存放需要跨端共享的常量:

home
├── shared
│   └── constants.js
├── server
│   ├── package.json
│   └── src
└── client
    ├── package.json
    └── src
         └── index.js

将原server/src/constants.js的内容迁移到shared/constants.js,然后两端分别导入:

  • Server端:import { test } from '../../shared/constants.js'
  • Client端:import { test } from '../../shared/constants.js'
    这种方式彻底隔离了server端的node_modules依赖,从根源避免报错。

2. 构建前自动拷贝常量文件

在client/package.json的脚本中添加预处理命令,启动或构建前将server端的常量文件复制到client目录:

{
  "scripts": {
    "prestart": "cp ../server/src/constants.js src/shared-constants.js",
    "prebuild": "cp ../server/src/constants.js src/shared-constants.js",
    "start": "react-scripts start",
    "build": "react-scripts build"
  }
}

客户端修改导入路径:

import { test } from './shared-constants.js'

注意:Windows系统需将cp替换为copy,或使用跨平台工具cpy-cli保证兼容性。

3. 配置Webpack别名排除无关依赖

如果使用Create React App,可借助craco修改Webpack配置:

  1. 安装依赖:npm install @craco/craco --save-dev
  2. 在client根目录创建craco.config.js:
const path = require('path');

module.exports = {
  webpack: {
    alias: {
      '@shared-constants': path.resolve(__dirname, '../server/src/constants.js')
    },
    externals: {
      dotenv: 'commonjs dotenv'
    }
  }
};
  1. 修改client的启动脚本:
{
  "scripts": {
    "start": "craco start",
    "build": "craco build",
    "test": "craco test"
  }
}
  1. 客户端导入:
import { test } from '@shared-constants'

通过externals配置排除server端的dotenv依赖,避免客户端打包时引入node环境变量相关代码。

4. 使用Monorepo管理(如pnpm Workspace)

在项目根目录创建pnpm-workspace.yaml:

packages:
  - 'server'
  - 'client'

在client/package.json中添加对server包的本地依赖:

{
  "dependencies": {
    "server": "workspace:*"
  }
}

客户端直接导入:

import { test } from 'server/src/constants.js'

这种方式适合中大型项目,统一管理跨包共享代码。


内容的提问来源于stack exchange,提问作者user4893295

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 16:57:29