详细分析 npm run build 基本知识 | 不同环境不同命令

目录

  • 前言
  • 1. 基本知识
  • 2. 构建逻辑

前言

关于部署服务器的知识推荐阅读:npm run build部署到云服务器中的Nginx(图文配置)

1. 基本知识

npm run 是 npm 的一个命令,用于运行 package.json 中定义的脚本,可以通过 “scripts” 字段为项目定义各种任务

"scripts": {
  "build:dev": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode local-dev",
  "build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod"
}

当执行 npm run build:dev,npm 会找到 build:dev并执行定义的命令

build:xxx 脚本通过 --mode 参数指定不同的环境模式,如 local-dev、prod 等

结合 Vite 的 .env 文件机制,不同模式下可以加载不同的环境配置:

  • .env:默认通用配置
  • .env.dev:开发环境
  • .env.prod:生产环境

截图如下:

在这里插入图片描述

以及上述参数中 --max_old_space_size=8192 用于设置 Node.js 的最大内存分配(单位:MB),解决构建大型项目时可能出现的内存不足问题

基本的配置如下:

在这里插入图片描述

对于其更详细的配置文件可看:深入理解 package.json的配置文件

补充一个vite的基本知识:

  • 快速构建:基于 Rollup 打包
  • 支持 Tree Shaking 和代码分割,优化资源体积
  • 支持现代浏览器的原生 ES 模块

使用 pnpm 安装依赖
“i”: “pnpm install”:比传统 npm install 快速且节省磁盘空间

2. 构建逻辑

具体构建资源路径在 vite.config.js 中,base 配置用于控制资源路径

import { resolve } from 'path'
import { loadEnv } from 'vite'
import type { UserConfig, ConfigEnv } from 'vite'
import { createVitePlugins } from './build/vite'
import { include, exclude } from "./build/vite/optimize"
// 当前执行node命令时文件夹的地址(工作目录)
const root = process.cwd()

// 路径查找函数,用于解析项目的根目录路径
function pathResolve(dir: string) {
  return resolve(root, '.', dir)
}

// 导出 Vite 配置
// https://vitejs.dev/config/
export default ({ command, mode }: ConfigEnv): UserConfig => {
  let env = {} as any // 存储环境变量
  const isBuild = command === 'build' // 判断当前是否是构建模式

  // 根据开发环境或构建模式加载不同的环境变量
  if (!isBuild) {
    // 开发模式下加载环境变量
    env = loadEnv(
      process.argv[3] === '--mode' ? process.argv[4] : process.argv[3],
      root
    )
  } else {
    // 构建模式下加载环境变量
    env = loadEnv(mode, root)
  }

  return {
    // 配置基础路径,用于静态资源的路径解析
    base: env.VITE_BASE_PATH, // 环境变量 `VITE_BASE_PATH` 决定基础路径
    root: root, // 项目根目录

    // 本地开发服务器的配置
    server: {
      port: env.VITE_PORT, // 开发服务器端口
      host: '0.0.0.0', // 监听所有 IP
      open: env.VITE_OPEN === 'true', // 是否自动打开浏览器
    },

    // 插件配置(提取到独立文件中管理)
    plugins: createVitePlugins(),

    // CSS 预处理器配置
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: '@import "./src/styles/variables.scss";', // 引入全局样式变量
          javascriptEnabled: true, // 启用 JavaScript 支持
        },
      },
    },

    // 路径解析设置
    resolve: {
      extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.scss', '.css'], // 允许的扩展名
      alias: [
        {
          find: 'vue-i18n', // 使用别名替换 i18n 包路径
          replacement: 'vue-i18n/dist/vue-i18n.cjs.js',
        },
        {
          find: /\@\//, // 将 `@` 解析为 src 目录
          replacement: `${pathResolve('src')}/`,
        },
      ],
    },

    // 构建配置
    build: {
      minify: 'terser', // 使用 terser 压缩代码
      outDir: env.VITE_OUT_DIR || 'dist', // 输出目录,默认为 `dist`
      sourcemap: env.VITE_SOURCEMAP === 'true' ? 'inline' : false, // 是否生成 SourceMap
      terserOptions: {
        compress: {
          drop_debugger: env.VITE_DROP_DEBUGGER === 'true', // 是否移除调试器
          drop_console: env.VITE_DROP_CONSOLE === 'true', // 是否移除 console.log
        },
      },
    },
    // 依赖优化配置
    optimizeDeps: { include, exclude },
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/925027.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

水体分割检测 包含YOLOV,COCO,VOC三种标记的数据集包含 857张图片

说明 水体分割检测指的是利用深度学习模型进行水体区域的分割和检测。YOLO(You Only Look Once)是一种流行的实时目标检测算法,其主要特点是速度快,适合于实时场景下的目标检测。 在水体分割检测中,可以使用YOLO算法来…

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题

20241128解决Ubuntu20.04安装libwxgtk3.0-dev异常的问题 2024/11/28 16:17 缘起:中科创达的高通CM6125开发板的Android10的编译环境需要。 安装异常:rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ sudo apt-get install libwxgtk3.0-de…

除了 Docker,还有哪些类似的容器技术?

在容器技术领域,除了广为人知的Docker,还有其他一些类似的技术。 Podman是一种无守护进程的容器引擎,主要应用于Linux系统容器管理与运行。与Docker的显著区别在于其无需长期运行的守护进程,这一特性在安全敏感环境中极具价值&…

JAVA:Spring Boot 实现接口防抖的技术指南

1、简述 在 Web 应用中,接口防抖是一种常见的技术手段,用于防止客户端在短时间内多次触发同一接口,从而减轻服务器的负担和防止重复操作。本文将介绍如何在 Spring Boot 项目中实现接口防抖功能,并通过实例展示其应用场景。 2、防…

连续变量的 交叉熵 如何计算 python tensorflow

连续变量的交叉熵通常在机器学习中的回归问题中使用,但它也可以用于分类问题,当概率分布是连续的时。连续变量的交叉熵计算公式如下: 设 \( p(x) \) 是真实概率密度函数,\( q(x) \) 是预测概率密度函数,交叉熵 \( H(p…

gitee:创建仓库,存入本地文件至仓库

一、git下载 git:下载与安装-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144107485?sharetypeblogdetail&sharerId144107485&sharereferPC&sharesourceweixin_46001736&spm1011.2480.3001.8118 二、创建仓库 1、主页面->右上角新增…

burpsuite(2)最新版burpsuite安装教程

一、安装Java 1.安装jdk21,直接官网下载 下载链接:Java21 2.cmd 输出java(查看java是否已经被安装) 3.java -version(查看java版本) 二、安装burpsuite 4.下载burpsuite最新版本,选择jar方式…

Java 语言的起源发展与基本概念(JDK,JRE,JVM)

Java语言的起源 源起 Java语言最初是由Sun Microsystems公司(该公司于2009年被Oracle公司收购)开发的一种编程语言。其创造者是詹姆斯高斯林(James Gosling),他是一位加拿大计算机科学家。其前身名为Oak(橡…

ELK(Elasticsearch + logstash + kibana + Filebeat + Kafka + Zookeeper)日志分析系统

文章目录 前言架构软件包下载 一、准备工作1. Linux 网络设置2. 配置hosts文件3. 配置免密登录4. 设置 NTP 时钟同步5. 关闭防火墙6. 关闭交换分区7. 调整内存映射区域数限制8. 调整文件、进程、内存资源限制 二、JDK 安装1. 解压软件2. 配置环境变量3. 验证软件 三、安装 Elas…

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具,可以构建,打包,部署项目,还可以管理…

26页PDF | 数据中台能力框架及评估体系解读(限免下载)

一、前言 这份报告详细解读了数据中台的发展历程、核心概念、能力框架及成熟度评估体系。它从阿里巴巴的“大中台,小前台”战略出发,探讨了数据中台如何通过整合企业内部的数据资源和能力,加速业务迭代、降低成本,并推动业务增长…

使用R的数据包快速获取、调用各种地理数据

数据一直是科学研究绕不开的话题,为了方便快捷的获取各种地理数据,许多R包被开发出来,今天介绍一些方便快捷的数据R包。 rnaturalearth 包使 Natural Earth 数据可用。自然地球特征包括 1:10m、1:50m 和 1&#xff1a…

docker的joinsunsoft/docker.ui修改密码【未解决】

docker的joinsunsoft/docker.ui修改密码 前言 这个挺遗憾的,个人能力不足。想修改密码是不可能了。 因为,系统的密码加密规则不知道。 目前了解到的内容是: 地址是:https://hub.docker.com/r/joinsunsoft/docker.ui服务是用go语…

启动SpringBoot

前言:大家好我是小帅,今天我们来学习SpringBoot 文章目录 1. 环境准备2. Maven2.1 什么是Maven2.2 创建⼀个Maven项⽬2.3 依赖管理2.3.1 依赖配置2.3.2 依赖传递2.3.4 依赖排除2.3.5 Maven Help插件(plugin) 2.4 Maven 仓库2.6 中…

SQL进阶——JOIN操作详解

在数据库设计中,数据通常存储在多个表中。为了从这些表中获取相关的信息,我们需要使用JOIN操作。JOIN操作允许我们通过某种关系(如相同的列)将多张表的数据结合起来。它是SQL中非常重要的操作,广泛应用于实际开发中。本…

JVM(JAVA虚拟机)内存溢出导致内存不足,Java运行时环境无法继续

1、先贴出服务最后打印出来的日志,意思就是给虚拟机分配的内存被用完了,没有可用的内存了,服务运行不了了,被动停服了。详细的日志记录在了/home/user/zx/tomcat/apache-tomcat-8.5.82/bin/hs_err_pid147951.log文件里。 Java Ho…

组成无重复数字的三位数

#include <stdio.h>int main() {int count 0;// 利用三重循环遍历所有可能的百位、十位、个位取值情况for (int bai 1; bai < 4; bai) {for (int shi 1; shi < 4; shi) {for (int ge 1; ge < 4; ge) {if (bai! shi && bai! ge && shi! ge) …

移远通信携手紫光展锐,以“5G+算力”共绘万物智联新蓝图

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办。作为紫光展锐重要的合作伙伴&#xff0c;移远通信应邀参会。 在下午的物联网生态论坛上&#xff0c;移远通信产品总监胡勇华作题为“5G与算力双擎驱动 引领智联新未来”的演讲&#xff0c;深度剖析了产业发展的趋…

Ubuntu 服务器部署 Tomcat 并配置 SSL/TLS 证书

本文目录 准备登陆云服务器安装 Java下载 tomcat 包配置防火墙浏览器访问 Tomcat 默认页面以服务的形式运行 Tomcat创建 Tomcat 用户和组创建 systemd 服务文件启动 tomcat 服务 Tomcat webapps 文件目录部署一个静态网站tomcat 的配置文件 将域名解析到服务器Tomcat 配置 SSL/…

【仓颉学习02】编译后运行报错:“由于找不到libcanjie-runtime.dll,无法继续执行代码。重新安装程序可能会解决此问题。”

敲了段《仓颉语言实践》&#xff08;张磊著&#xff09;书上的代码&#xff0c;如下&#xff1a; package test //coding:utf-8struct Employee{var name:Stringprivate var realSalary:Float64public Employee(name:String,realSalary:Float64){this.namenamethis.realSalary…