Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
T treasure
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 12
    • Issues 12
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • External wiki
    • External wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • FE
  • treasure
  • Issues
  • #225

Closed
Open
Created Mar 05, 2024 by liuyajun@liuyajunMaintainer

邻小汇热更新失败(开发环境更新文案会导致整个页面刷新)

邻小汇热更新失败(开发环境更新文案会导致整个页面刷新)

原因

const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV); // 需要前置,防止被 dotenv 影响;取值来自 build/dev-server.js 和 build/build.js 中设置

// const projectPathRoot = process.cwd();
const dotenv = require('dotenv');
dotenv.config({ path: `.env.${process.env.npm_config_env}` }); // 这里会覆盖 NODE_ENV,但是在 build/dev-server.js 中进行了恢复

dotenv 引入的 .env.te 中的 NODE_ENV 应用到了开发环境,导致原来的 process.env.NODE_ENV development 变成了 production,导致热更新插件判断为生产环境,所以不进行热更新

NODE_ENV=production
NODE_TYPE=te

解决方案

在 dotenv 引用之后重新赋予 process.env.NODE_ENV 正确的值,目前是和邻汇吧后台一样,在 build/dev-server.js 中设置,因为该文件只会在开发脚本中被执行: "start": "node --max-old-space-size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --progress --config build/dev-server.js",

build/dev-server.js

'use strict';

process.env.NODE_ENV = 'development'; // 指定编译环境为 development/production(依赖包内只判断这两个值)

// ...

也可以在 dotenv 之后通过 IS_PROD 重新设置:

const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV); // 需要前置,防止被 dotenv 影响;取值来自 build/dev-server.js 和 build/build.js 中设置

// const projectPathRoot = process.cwd();
const dotenv = require('dotenv');
dotenv.config({ path: `.env.${process.env.npm_config_env}` }); // 这里会覆盖 NODE_ENV,但是在 build/dev-server.js 中进行了恢复

process.env.NODE_ENV = IS_PROD ? 'production' : 'development';
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking