热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webpack包构建工具从基础配置到打包发布

webpack是当前前端最热门的前端资源模块化管理和打包工具之一。基于node.js环境,提供前端模块化支持,代码压缩混淆,处理浏览器端JavaScript兼容性,性能优化等。项目


webpack是当前前端最热门的前端资源模块化管理和打包工具之一。

基于node.js环境,提供前端模块化支持,代码压缩混淆,处理浏览器端Javascript兼容性,性能优化等。

项目中使用了webpack工具并且正常配置之后,我们就可以轻松使用模块化语法 import/export,less语法, es6转es5等等,让开发变得简单起来。

webpack官方文档:概念 | webpack 中文文档


⚠️   要安装webpack之前,必须保证电脑中已经安装了node.js。 Node.js可以使用npm安装各种插件。

目录

一. 基本配置

1.nodeJs官网 按电脑配置直接下载即可;

2.安装完成后在cmd命令中输入 node -v, 可以看到node版本号即表示安装成功。

3. npm init -y 生成package.json配置文件 

4. 项目中安装webpack(如果是webpack 4.0及以上版本,在安装webpack的同时还需要安装webpack-cli)

 5.在项目根目录下创建webpack.config.js配置文件,并初始化基本配置

6.在package.json的scripts节点下,新增dev脚本,在终端中执行 npm run dev命令时,就会启动webpack进行项目的打包构建.  

二. 热部署等常见插件

1. 安装webpack热部署插件,自动打包和构建

2. webpack.config.js中配置devServer(自动在浏览器中打开服务地址和指定端口号)

三. loader加载器

四.  打包发布

1. build打包发布

2.打包发布时自动清除目录中的旧文件 

五. 定位error代码位置(source map)及配置全局路径(@)

1. 定位error代码位置 - source map

2.  配置@指定文件目录标识




一. 基本配置

1.nodeJs官网 按电脑配置直接下载即可;


2.安装完成后在cmd命令中输入 node -v, 可以看到node版本号即表示安装成功。


3. npm init -y 生成package.json配置文件 


4. 项目中安装webpack(如果是webpack 4.0及以上版本,在安装webpack的同时还需要安装webpack-cli)

npm install webpack webpack-cli -D

 


 5.在项目根目录下创建webpack.config.js配置文件,并初始化基本配置

module.exports = {
mode:'development' // development是开发环境, production是生产环境
}

6.在package.json的scripts节点下,新增dev脚本,在终端中执行 npm run dev命令时,就会启动webpack进行项目的打包构建.  

"scripts": {
"dev": "webpack"
},

 PS: 此时我们可以在js中使用import语法,如src目录下当前有index.js和math.js, math.js中暴露出了add方法:

export function add(a,b){ return a+b}

index.js中可以这样引入了:

import { add } from './math.js'

console.log(add(2,3))

执行 npm run dev命令(webpack就会将一些语法import和export浏览器不太兼容的语法转为可识别的):

- 默认webpack会将src目录下面的文件进行压缩。会生成一个dist文件,里面有一个main.js. (此时index.html中直接引入 dist/main.js就能正常看到想要的效果了)

-  指定打包入口,出口 (webpack.config.js里配置)

const path = require('path') // 指定项目路径
module.exports = {
mode:'development',
// 指定要处理那个文件
entry: path.join(__dirname,'./src/index.js'),
// 指定要放到的目录和生成的文件名
output:{
path:path.join(__dirname,'dist'),
filename:'js/main.js'
},
}



二. 热部署等常见插件

1. 安装webpack热部署插件,自动打包和构建

(上面1-6步操作为基本操作,我们会发现每次更新了js都要重新运行 npm run dev发布,非常的不方便,热部署就很有必要了。)

- 安装 webpack-dev-server  (类似于node.js阶段用到的nodemon工具,源代码有更新,自动打包和构建)


  1.  安装: npm install webpack-dev-server@3.11.2 -D.    ( 注意: 高版本的可能会报错)
  2.  配置package.json 文件中的scripts:     "dev": "webpack serve"
  3. 执行命令: npm run dev    

    "dev":"webpack serve"


    ⚠️  webpack server此时生成的js存放在了内存中而非磁盘中,所以在系统文件中看不到。 html引用要直接引用,如:‘/js/bundle.js’

- 安装 html-webpack-plugin

(假设index.html在src下面,则服务启动之后还要进入src才能看到界面,所以需要html-webpack-plugin来复制一份到根目录)


  1.  安装: npm install html-webpack-plugin@5.3.2 -D
  2.  在webpack.config.js里配置

const path = require('path') // 指定项目路径
const HtmlPlugin = require('html-webpack-plugin') // 导入html
const htmlPlugin = new HtmlPlugin({
template: './src/index.html', //指定源文件的存放路径
filename: './index.html' // 指定生成的文件存放路径
})
module.exports = {
mode: 'development',
// 指定要处理那个文件
entry: path.join(__dirname, './src/index.js'),
// 指定要放到的目录和生成的文件名
output: {
path: path.join(__dirname, 'dist'),
filename: 'js/main.js'
},
plugins:[htmlPlugin]
}

   3. npm run dev
⚠️  此时启动服务之后直接就能看到index.html, 在目录文件中看不到,因为是在内存里, html里的js也不需要手动引入,该服务会在内存中的index.html里自动引入同目录的js


2. webpack.config.js中配置devServer(自动在浏览器中打开服务地址和指定端口号)

devServer:{
open:true,
port:3000,
host:'127.0.0.1'
}

三. loader加载器

在实际开发中,webpack只能打包处理.js格式的文件。如果非.js后缀的文件,就要看是否配置里对应的loader (如: import './index.css' ,不配置css loader则js中无法引入)
(在webpack.config.js中配置)

配置方法:

需要在webpack.config.js的module.exports中配置,增加module对象(所有第三方文件模块的匹配规则都放在这里),然后把规则放到rules数组中,如css loader:

module:{
// 所有第三方文件模块的匹配规则
rules:[
{test:/\.css$/,use:['style-loader','css-loader']},
],
}

常见的配置:

1. css loader
    安装:npm i style-loader css-loader -D
    配置:{test:/\.css$/,use:['style-loader','css-loader']}
2. less loader
    安装:npm i less-loader less -D
    配置:{test:/\.less$/,use:['style-loader','css-loader','less-loader']}

3. 图片 loader
    安装:npm i url-loader file-loader -D
    配置:{test:/\.jpg|png|gif$/,use:'url-loader?limit=22229&outputPath=images''}


    PS: limit指定转成base64位的最低限制byte, 如果图片小于这个byte则会被转为base64位。 outputPath=images 指定打包后图片的位置


4. 处理高级js语法 loader
    安装:npm i babel-loader@8.2.2 @babel/core@7.14.6 @babel/plugin-proposal-decorators@7.14.5 -D
    配置:{test:/\.js$/,use:'babel-loader',exclude:/node_modules/},
    在根目录创建babel.config.js并配置
        module.exports = {
          // 声明babel可用的插件
          plugins:[['@babel/plugin-proposal-decorators',{legacy:true}]]
      }


四.  打包发布

1. build打包发布

- 在package.json的scripts里进行配置 :"build":"webpack --mode production"

- 执行打包命令: npm run build


2.打包发布时自动清除目录中的旧文件 

  安装: npm i clean-webpack-plugin -D 

 在webpack.config.js中配置:

const { CleanWebpackPlugin } = require('clean-webpack-plugin')
plugins:[new CleanWebpackPlugin()], 

五. 定位error代码位置(source map)及配置全局路径(@)

1. 定位error代码位置 - source map

source map 是一个信息文件,里面存储着位置信息,有了它,就可以定位到错误js的具体位置,而不是打包后的,方便开发过程中的调试。

在js中故意打印一个没有定义的变量, 浏览器中默认打印出报错的行数是打包后所在js的位置,不方便定位错误代码:

不做source map时,如下图定位不到正确位置

配置source map后,准确定位:

在webpack.config.js里配置:devtool:'eval-source-map'
⚠️ 发布的时候建议把该配置去掉或者使用下面的配置,只暴露错误的行数在哪里,无法看到js,安全性高: devtool:'nosources-source-map'


2.  配置@指定文件目录标识

在webpack.config.js中配置, 例如:下面@代表src源代码目录

    resolve :{
        alias:{
            '@':path.join(__dirname,'./src/')
        }
    }

在js中引用:

// import * as math from './js/math.js'
import * as math from '@/math.js'


webpack中的这些配置,不需要死记硬背。 实际开发过程中,能做到看得懂可以修改配置就可以了。

今天的分享就到这里了,给自己的学习做个笔记,更希望对你有帮助~


 



推荐阅读
  • 基于Node.js、EJSExcel、Express与Vue.js构建Excel转JSON工具:首阶段——Vue.js项目初始化及开发环境配置
    在近期的一个H5游戏开发项目中,需要将Excel数据转换为JSON格式。经过调研,市面上缺乏合适的工具满足需求。因此,决定利用Node.js、EJSExcel、Express和Vue.js自行构建这一工具。本文主要介绍项目的第一阶段,即Vue.js项目的初始化及开发环境的配置过程,详细阐述了如何搭建高效的前端开发环境,确保后续功能开发的顺利进行。 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 根据不同环境需求,利用 Vue CLI 的 `npm run build` 命令对项目进行定制化打包,如测试、预发布和生产环境。通过配置 `process.env` 变量,实现不同环境下接口和服务的动态切换,确保应用在各阶段都能高效运行和调试。 ... [详细]
  • 微软发布紧急安全更新,所有Windows 10版本均面临影响!
    微软于周五紧急发布了两项安全更新,旨在解决Windows 10所有版本中Windows Codecs库和Visual Studio Code应用存在的安全隐患。此次更新是继本周初发布的月度例行安全补丁之外的额外措施,凸显了这些问题的紧迫性和重要性。这些漏洞可能被攻击者利用,导致系统权限提升或远程代码执行等严重后果。建议用户尽快安装更新,以确保系统的安全性。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • 本文深入探讨了NDK与JNI技术在实际项目中的应用及其学习路径。通过分析工程目录结构和关键代码示例,详细介绍了如何在Android开发中高效利用NDK和JNI,实现高性能计算和跨平台功能。同时,文章还提供了从基础概念到高级实践的系统学习指南,帮助开发者快速掌握这些关键技术。 ... [详细]
  • APKAnalyzer(1):命令行操作体验与功能解析
    在对apkChecker进行深入研究后,自然而然地关注到了Android Studio中的APK分析功能。将APK文件导入IDE中,系统会自动解析并展示其中各类文件的详细信息。官方文档提供了详细的命令行工具使用指南,帮助开发者快速上手。本文以一个RecyclerView的Adapter代理开源库为例,探讨了如何利用这些工具进行高效的APK分析。 ... [详细]
author-avatar
sadsafsasgdg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有