webpack答疑

1 输入webpack命令,执行的是全局版本还是本地版本的webpack

当在命令行窗口输入webpack命令时,其执行优先级可通过以下步骤明确判断:


1.1 【全局安装优先机制】

  • 执行原理:系统会按照环境变量PATH的顺序逐级查找可执行文件

  • 路径比对

    • 全局安装路径:npm install -g webpack会安装在类似/usr/local/bin(Mac/Linux)或C:\Users\用户名\AppData\Roaming\npm(Windows)的路径
      • 补充:如果已经全局安装了 Webpack,则可以简单地运行命令——webpack (依赖系统path,全局路径需在系统path中配置)
    • 本地安装路径:npm install webpack会安装在项目目录的./node_modules/.bin/webpack
  • 判定方式

    • 直接运行 webpack,系统按 PATH 顺序查找可执行文件。
    • 如果全局安装路径(如 /usr/local/bin)在 PATH 中靠前 → 执行全局版本
    • 如果本地路径 ./node_modules/.bin 被手动加入 PATH 并靠前 → 执行本地版本

1.2 【本地版本特殊调用场景】

  • 必须满足以下任一条件才会使用本地安装:
    • (1) 通过npx webpack显式调用(原理:npx会自动检索当前目录node_modules
    • (2) 在package.json的scripts中配置了"build": "webpack"后通过npm run build执行(原理:npm会将本地node_modules/.bin临时加入PATH)
    • (3) 显式指定相对路径执行:./node_modules/.bin/webpack

1.3 【项目规范建议方案】

  • 推荐做法:所有项目均应在本地安装特定版本
  • 操作步骤
    1. 项目根目录执行:npm install webpack webpack-cli --save-dev
    2. package.json的scripts中配置:
      "scripts": {"build": "webpack --config webpack.config.js"
      }
      
    3. 通过npm run build触发构建
  • 优势:确保团队成员和部署环境都使用完全一致的webpack版本,规避全局版本差异引发的构建问题

1.4 【主动验证方式】

通过whichwhere命令精确定位实际调用的webpack:

# Mac/Linux
which webpack# Windows
where webpack

若输出路径包含node_modules则为本地版本,包含npm全局目录则为全局版本

where webpack有误,渴直接运行命令查看版本

# 查看当前调用的版本
webpack --version
  • 逻辑判断
    • 若版本号与项目的 package.json 中的 webpack 版本一致 → 本地版本被正确调用
    • 若版本号与全局安装的 webpack -g 版本一致 → 使用了全局版本

1.5 异常场景说明:

若同时存在全局和本地安装时出现版本冲突,建议:

  1. 删除全局安装:npm uninstall -g webpack webpack-cli
  2. 强制限制本地调用(推荐通过npxnpm scripts
  3. 使用版本锁:在package.json中指定"webpack": "^5.76.0"等固定版本号

通过这种结构化控制,能有效避免日常开发中70%以上的构建环境相关故障。

2 补充:package.json的scripts

参考https://blog.csdn.net/Triumph_light/article/details/135636652?spm=1001.2014.3001.5506

2.1 什么是npm script

在package.json里面定义的scripts字段就是,它的每一个属性都对于一段脚本。

{// ..."scripts": {"build": "node build.js"}
}

其中build命令对应的脚本就是node build.js,使用npm run命令,就可以执行。

$ npm run build

等同于执行

$ node build.js

2.2 npm run的原理

  • 我们在项目当中运行npm run xxx,主要分为以下几步:
    1. 从package.json当中读取scrips对象。
    2. 以传给npm run命令的第一个参数作为键,在scripts对象当中找到对应的值作为接下来要执行的命令,没有找到会报错。
    3. 执行npm run,就会立马自动创建一个shell,其中只要是shell可以运行的命令,就可以写在npm script当中。
    4. 将当前目录下的node_modules/.bin这个子目录加入PATH变量(这就意味着,当前目录的node_modules/.bin子目录里的所有脚本,都可以直接用脚本名调用,而不需要加路径)
"test": "mocha test"
// 而不用写成这样
"test": "./node_modules/.bin/mocha test"
  1. 在这个shell上执行上述命令

npm 脚本的唯一要求就是可以在 Shell 执行,因此它不一定是 Node 脚本,任何可执行文件都可以写在里面。 npm 脚本的退出码,也遵守 Shell 脚本规则。如果退出码不是0,npm 就认为这个脚本执行失败。

3 补充:npm安装命令

3.1 npm install webpacknpm install webpack --save-devnpm install webpack -g

3.1.1 对比
命令安装位置作用域适用场景
npm install webpack -g全局目录(如 /usr/local/bin%APPDATA%\npm所有项目可用1. 不推荐,易导致版本冲突;2. 不会修改任何项目的 package.json ;3. 其他开发者或部署环境无法自动获取此依赖(需手动安装)
npm install webpack项目内 node_modules仅当前项目默认写入 dependencies(1. ×,Webpack 应归类为开发依赖;2. 这样在项目发布时会将 Webpack 打包到生产环境(无意义且增大体积))
npm install webpack --save-dev项目内 node_modules仅当前项目1. 推荐,归类到 devDependencies(构建工具应在此类,npm install --production 时自动排除开发依赖devDependencies,精简生产环境)

npm install # 同时安装 dependencies + devDependencies

3.1.2 安装位置决策树
是否要在任何目录直接运行命令? → 是 → ❌ 依然不要全局安装,改用 npx webpack
是否要与其他开发者共享配置? → 是 → ✅ 必须 --save-dev + 提交 package.json
是否要部署到服务器? → 是 → ✅ 本地安装 + devDependencies 确保环境一致

3.2 --save和–save-dev区别

3.2.1 --save
  • 作用:将安装的包信息写入 package.jsondependencies 字段。
  • 本质
    用于标记 生产环境依赖(应用运行时必须的依赖包)。
  • 典型依赖
    • 框架库:如 react, vue, lodash
    • 工具运行时:如 axios, moment
    • 业务核心依赖:如 redux, express
3.2.2 --save-dev--dev 的完整写法)
  • 作用:将包信息写入 package.jsondevDependencies 字段。
  • 本质
    用于标记 开发环境依赖(仅在开发、构建或测试阶段需要的工具)。
  • 典型依赖
    • 构建工具:如 webpack, vite, babel
    • 测试框架:如 jest, mocha
    • 代码检查工具:如 eslint, prettier
    • 类型定义:如 @types/node

3.3 --save和无–save的区别

npm>=5的版本,完全相同。

命令npm ≥5 的行为(2017年后)npm ≤4 的行为(已淘汰)package.json 的影响
npm install xxx自动将包写入 dependencies不保存到任何依赖字段现代版本:✅ 更新 dependencies
npm install xxx --save完全等同于 npm install xxx强制写入 dependencies旧版中必须加此参数才能保存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87186.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87186.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87186.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

API接口开放平台 Crabc 3.4 发布

Crabc 是一款 API 接口开发平台,企业级接口管理、SQL2API 平台。支持动态数据源、动态 SQL 和标签, 支持接入(mysql、oracle、达梦、TiDB、hive、es 和 mongodb)等 SQL 或 NoSQL 数据源,在线可视化编写 SQL 快速发布接…

PD快充协议芯片XSP04D支持全协议+支持串口通讯+支持与主板共用一个Type-C

随着Type-C接口的充电器普及,市面上的PD充电器越来越多,小家电产品可不配充电器,使用Type-C接口,然后加入一颗PD协议取电协议芯片XSP08即可让充电器/充电宝/车充等电源输出9V/12V/15V/20V电压给产品供电。 针对各种各样的不同需求…

C# 高效加载txt文件内容

在 C# 中,高效加载 TXT 文件内容可以通过多种方法实现,具体方法的选择取决于文件的大小和读取需求。以下是一些常用的方法: 1. 使用 File.ReadAllText 如果文件比较小,并且你希望一行一行地读取整个内容,可以使用 Fi…

(2)pytest执行用例的规则

1. 简介 今天主要学习一下pytest的执行用例的规则。 2. 通过help帮助查看pytest如何使用 .查看pytest命令行参数,可以用pytest -h 或pytest --help查看 3. 用例设计原则 文件名以test_*.py文件和*_test.py以test_开头的函数以Test开头的类以test_开头的方法所有的…

InnoDB数据页

导读: 我们已经知道了页是数据库存储的基本单位,知道了一条行记录的存储格式是怎样的,当数据越来越多时,那一条条行记录具体又是怎么在页中被组织起来的呢? 一、InnoDB数据页结构 二、总结 1、一条条行数据是如何在数…

世赛背景下,中职物联网应用与服务赛项实训解决方案

一、世赛背景与物联网应用赛项概述 1.1 世赛发展历程及对中职教育的影响 世界技能大赛(WorldSkills Competition,简称世赛)自1950年创立以来,已经成为全球范围内展示职业技能水平的重要赛事。截至2024年,世赛已成功举…

【攻防篇】解决:阿里云docker 容器中自动启动xmrig挖矿-- 实战

文章目录 场景一、问题二、原因三、解决方案1、控制台处理2、 [清除与防护](https://blog.csdn.net/ladymorgana/article/details/148921668?spm1001.2014.3001.5501)1. 紧急处理:停止挖矿进程2. 清理被感染的容器3. 防护措施:防止再次被入侵4. 排查入侵…

飞算智造JavaAI:智能编程革命——AI重构Java开发新范式

文章目录 引言:当传统Java开发遇上AI一、技术架构解析1.1 核心架构图1.2 关键技术栈 二、实战演示:从需求到代码的全AI辅助2.1 场景:电商优惠券系统开发2.2 代码生成实例2.3 智能调试演示 三、与传统开发模式对比测试3.1 基准测试数据3.2 典型…

[特殊字符] 分享裂变新姿势:用 UniApp + Vue3 玩转小程序页面分享跳转!

在如今流量成本日益攀升的移动互联网时代,"用户分享拉新" 成为了增长的重要策略。而微信小程序作为天然具备社交传播力的平台,提供了较完善的分享机制支持。本文将从实战角度出发,手把手教你如何使用 uni-app Vue3 构建一个支持「…

[创业之路-458]:企业经营层 - 蓝海战略 - 重构价值曲线、整合产业要素、创造新需求

“重构价值曲线、整合产业要素、创造新需求”是蓝海战略中实现价值创新的核心路径,它们构成了一个从内部优化到外部协同,再到市场颠覆的完整逻辑链条。以下从理论框架、实践方法和企业案例三个维度展开分析: 一、重构价值曲线:打…

慢查询引发对mysql索引的探索

目录 一、索引分类 1.1 聚簇索引结构 1.2 非聚簇索引(二级索引) 1.3 主键索引 1.4 唯一索引 1.5 普通索引 1.6 前缀索引 1.7 联合索引 1.8 索引下推 1.9 索引区分度 二、优化索引的方法 2.1 索引的特点 2.2 适合创建索引的情况 2.3 不适合创建索引的情况 2.4 优…

启用不安全的HTTP方法

背景: 今天被安全检测出一个这样的问题:启用不安全的HTTP方法。DELETE方法是用来调试web服务器连接的http方式,支持该方式的服务器文件可能被非法删除;PUT方法用来向服务器提交文件;TRACE方法本用于客户端测试到服务器…

fvcom 水深文件dep制作

fvcom 水深文件dep制作 fvcom 水深文件dep制作20250630 本次案例网格和水深展示 vv image Figure 1 Model domain 本次制作其它驱动文件的输入文件为yellowsea.2dm 格式2dm; 文件内容格式详细介绍参考: https://www.xmswiki.com/wiki/SMS:2D_Mesh_Files_*.2dm …

ViewModel是EventFlow-State映射

ViewModel负责组装界面状态State。引发State变换的原因有很多,比如用户点击某个按钮,一次网络请求受到应答,一次本地数据库查询返回结果等等。因此ViewModel是根据各种事件生成State的对象,换句话说,是一个从多个事件流…

javaweb Day2

PreparedStatement作用: 预编译SQL语句并执行: 预防SQL注入问题 SQL注入:SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法。

Java项目:基于SSM框架实现的中学教学管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本景海中学教学管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据…

JVM调优实战 Day 15:云原生环境下的JVM配置

【JVM调优实战 Day 15】云原生环境下的JVM配置 文章标签 jvm调优, 云原生, Java性能优化, JVM参数配置, 容器化部署, Kubernetes, Docker, JVM在云原生中的应用 文章简述 随着云原生技术的普及,Java 应用越来越多地运行在容器(如 Docker)和…

数据结构day7——文件IO

一、标准 IO 的起源与概念 标准 IO(Standard Input/Output)是由 Dennis Ritchie 在 1975 年设计的一套 IO 库,后来成为 C 语言的标准组成部分,并被 ANSI C 所采纳。它是对底层文件 IO 的封装,提供了更便捷、可移植的文…

6.Docker部署ES+kibana

部署ES(Elasticsearch)kibana 1.ES暴露的端口很多 2.ES十分消耗内存 3.ES的数据一般需要挂载出去,放在安全目录(挂载) elastic 前往官方手册 1.下载运行elasticsearch的 docker run -d --name elasticsearch --net somenet…

使用mysqldump对mysql数据库进行备份

目录 1软件说明 2语法格式 3备份流程 3.1只备份指定数据库中表和数据 3.1.1准备目录 3.1.2备份db1数据库里面的所有表信息 3.1.3还原备份 3.2备份数据库结构 3.2.1备份db1数据库的结构和数据 3.2.2还原数据库 3.3备份所有数据库 3.3.1备份数据库 3.3.2还原数据库 1…