Webpack入门实践

Vue.js与Webpack入门实践项目 在当今快速发展的前端开发领域中,Vue.js已经成为一款广受开发者欢迎的JavaScript框架。Vue.js以其轻量级、数据驱动以及组件化的设计,赢得了众多开发者的青睐。在本章中,我们将简要介绍Vue.js的诞生背景、特点以及其在现代Web应用中的应用价值。Vue CLI是一个基于Vue.js进行快速开发的完整系统,提供了一个标准的开发环境和丰富的功能。 阅读详情

一些基本的概念

* Webpack是一种模块化的解决方案 *
webpack是以CommonJS的形式来书写脚本的。
能被Webpack模块化的不仅仅是JS,还有css以及图片等。

WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式以供浏览器使用。


Webpack的工作方式是:把你的项目当做一个整体,通过一个给定的主文件(如:index.js),Webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包为一个浏览器可识别的JavaScript文件。

$ webpack --config XXX.js   //使用另一份配置文件(比如XXX.js)来打包
$ webpack --watch   //监听变动并自动打包
$ webpack -p    //压缩混淆脚本,这个非常非常重要!
$ webpack -d    //生成map映射文件,告知哪些模块被最终打包到哪里了

安装

npm install webpack -g  //全局安装
npm install webpack --save-dev  //安装到项目目录

生成Source Maps

在webpack的配置文件中配置source maps,需要配置devtool,它有以下四种不同的配置选项,各具优缺点,描述如下:
* source-map: 在一个单独的文件中产生一个完整且功能完全的文件。这个文件具有最好的source map,但是它会减慢打包文件的构建速度;
* cheap-module-source-map:在一个单独的文件中生成一个不带列映射的map,不带列映射提高项目构建速度,但是也使得浏览器开发者工具只能对应到具体的行,不能对应到具体的列(符号),会对调试造成不便;
* eval-source-map:使用eval打包源文件模块,在同一个文件中生成干净的完整的source map。这个选项可以在不影响构建速度的前提下生成完整的sourcemap,但是对打包后输出的JS文件的执行具有性能和安全的隐患。不过在开发阶段这是一个非常好的选项,但是在生产阶段一定不要用这个选项;
* cheap-module-eval-source-map:这是在打包文件时最快的生成source map的方法,生成的Source Map 会和打包后的JavaScript文件同行显示,没有列映射,和eval-source-map选项具有相似的缺点;

上述选项由上到下打包速度越来越快,不过同时也具有越来越多的负面作用,较快的构建速度的后果就是对打包后的文件的的执行有一定影响。
在学习阶段以及在小到中性的项目上,eval-source-map是一个很好的选项,不过记得只在开发阶段使用它

从一个简单的DEMO开始

  1. 安装webpack:npm install webpack --save-dev
  2. 在项目根目录下新建webpack.config.js文件
  3. 目录结构
    目录结构

index.html文件中引入最终要生成的js文件

//index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Webpack</title>
</head>
<body>
    <div id="root"></div>
    <script src="../dist/js/bundle.js"></script>
</body>
</html>

index.js是项目的打包的入口文件,其中引入了testmodule模快

//index.js
var test = require('./testmodule.js');
test.print();
var node = document.querySelector('#root');
node.innerHTML = test.txt;

testmodule.js

//testmodule.js
module.exports={
    print:function(){
        console.log('there is testmodule print');
    },
    txt: 'hello,webpack'
}

webpack.config.js配置文件中的内容,就是简单的定义了入口文件和最终生成的文件。

module.exports={
    entry: __dirname + '/src/js/index.js',
    output:{
        path:__dirname + '/dist/js/',
        filename:'bundle.js'
    }
}

在命令行运行

webpack

/dist/js/目录下就生成了bundle.js文件了。

第2个DEMO:多个入口文件

此时webpack.config.js中的内容是:

module.exports={
    devtool: 'eval-source-map',
    entry: {
        index: './src/js/index',
        nav: './src/js/nav'
    },
    output:{
        path:'./dist/js/',
        filename:'[name].bundle.js'
    }
}

index.html和nav.html两个html分别包含了两个不同的js文件index.js以及nav.js,因此配置了两个入口,分别生成index.bundle.js以及nav.bundle.js两个js文件。
关于entry的配置:

1. entry的值是字符串,这个字符串对应的模块会在启动的时候加载
2. entry的值是数组,这个数组内所有模块会在启动的时候加载,数组的最后一个元素作为export
3. entry的值是对象,可以构建多个bundle

关于webpack-dev-server

webpack-dev-server 使用方法,看完还不会的来找我~

Loaders

通过使用不同的loader,webpack调用外部的脚本或工具可以对各种各样的格式的文件进行处理,比如说分析JSON文件并把它转换为JavaScript文件,或者说把下一代的JS文件(ES6/ES7)转换为现代浏览器可以识别的JS文件。对于React的开发而言,合适的loader可以把React的JSX文件转换为JS文件。

Loaders需要单独安装并且需要在Webpack.config.js下的modules关键字下进行配置,Loaders是一个数组,其中的每一个loader的配置选项包括以下几个方面:
* test:一个匹配loaders所处理的文件的扩展名的正则表达式(必须)
* loader:loader的名称(XXX-loader,-loader可省略),多个loader之间用“!”连接起来。(必须)
* include/exclude:手动添加必须处理的文件(文件夹)或屏蔽不需要处理的文件(文件夹)(可选);
* query:为loaders提供额外的设置选项(可选)

loader需要单独安装,一般的安装命令如下:

npm install xxx-loader --save-dev

然后在webpack.config.js中的引用:

以解析JSON为JavaScript对象的loader为例

//安装
npm install json-loader --save-dev

//在webpack.config.js中的相关配置
module.exports = {

    module:{
        loaders:[
            {
                test: /\.json$/,
                loader: 'json'      
            }
        ]   
    }
}

经过上面这样配置之后,项目中所有以.json结尾的json文件加载时都会转换为JS对象。

Webpack与Babel

Babel的安装与配置

Babel其实是几个模块化的包,其核心功能位于称为babel-core的npm包中,不过webpack把它们整合在一起使用,但是对于每一个你需要的功能或拓展,你都需要安装单独的包(用得最多的是解析Es6的babel-preset-es2015包和解析JSX的babel-preset-react包)。

一次性安装这些依赖包

npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react

在webpack.config.js中配置babel:

module.exports = {
    module:{
        loaders:[
            {
                test:/\.js$/,
                exclude:'/node_modules/',
                loader:'babel',
                query:{
                    presets:['es2015','react']
                }
            }
        ]   
    }
}

现在webpack的配置已经允许你使用ES6以及JSX的语法了.不过使用react还需要安装React和React-DOM

DEMO:ES6模块化实践

//webpack.config.js
module.exports = {
    devtool:'eval-source-map',
    entry:__dirname + '/js/index.js',
    output:{
        path: __dirname + '/dist/',
        filename: 'index.bundle.js'
    },
    module:{
        loaders:[
            {
                test:/\.js$/,
                exclude:'/node_modules/',
                loader:'babel',
                query:{
                    presets:['es2015']
                }
            }
        ]
    }
}
//a.js
import B from './b'

class A extends B{
    constructor(){
        super();
        console.log('A init.');
    }

    sayHi(){
        console.log('A:hi');
    }
}

export default A;
//b.js
class B {
    constructor(){
        console.log('B init.');
    }

    printf(str){
        console.log('B.print:'+str);
    }

}

export default B;
//index.js
import A from './a'

let obj = new A();
obj.printf('test');
obj.sayHi();

//B init.
//A init.
//B.print:test
//A:hi
//index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ES6-Webpack</title>
</head>
<body>
    <div id="root">
        this is a test for es6+webpack
    </div>
    <script src="dist/index.bundle.js"></script>
</body>
</html>

Webpack与React

使用React需要安装React和React-DOM

npm install --save-dev react react-dom

webpack.config.js的配置见上一节
然后我们就可以使用ES6的语法来编写React应用了

//Greeter,js
import React, {Component} from 'react'
import config from './config.json';

class Greeter extends Component{
  render() {
    return (
      <div>
        {config.greetText}
      </div>
    );
  }
}
export default Greeter

CSS

webpack提供两个工具处理样式表,css-loader 和 style-loader,二者处理的任务不同,css-loader使你能够使用类似@import 和 url(…)的方法实现 require()的功能,style-loader将所有的计算后的样式加入页面中,二者组合在一起使你能够把样式表嵌入webpack打包后的JS文件中。

//安装
npm install --save-dev style-loader css-loader

使用:

module.exports = {
    module:{
        loaders:[
            {
                test:/\.css$/,
                loader:'style!css'  //添加对样式表的处理
            }
        ]
    }
}

webpack只有单一的入口,其它的模块需要通过 import, require, url等导入相关位置,为了让webpack能找到css文件,我们把它导入入口js文件中

import './main.css';    //使用require导入css文件

参考链接

入门 Webpack,看这篇就够了
一小时包教会 —— webpack 入门指南

别再混淆了!5分钟搞懂机器人导纳控制与阻抗控制的本质区别(附Simulink对比仿真) 本文深入解析机器人柔顺控制中的导纳控制与阻抗控制的本质区别,通过信号流方向、架构对比和应用场景三个关键视角进行详细阐述。文章还提供Simulink对比仿真案例,帮助读者快速理解两种控制策略的差异及其适用场景,特别适合机器人控制领域的研究者和工程师参考。 阅读详情

相关推荐

安卓手机游戏《英雄迷宫冒险》存档修改

警告 修改前务必备份存档文件夹。该游戏有自动删除存档的功能,有问题的存档会自动删除。 修改对应的游戏版本为1.5。 存档保存位置 内部存储\Android\data\com.xmmf.yxmgmx.taptap\files 该文件夹中文件如下: data.wsf:数据文件。 wsfSave0:第一个存档。 wsfSave1:第二个存档。 修改金钱的例子 先进游戏确认当前金钱数量。当前金钱是2498,然后退出游戏。 根据金钱数量计算出存档中的内容。2498的十六进制是9C2,存档中的内容在存档中搜索该数

番茄鸡蛋的专栏 9364

webpack实战全记录

最近学习webpack相关知识,特此记录下学习过的文档以及搭建过程;如有错误,记得告诉我呀。项目地址:地址,求星星 // 1、clone代码到本地 cd vue-demo npm i // 通过package.json的scripts可以看到区分了不同环境的启动命令 npm run dev:local // 例如:启动 npm run build // 打包 文章目录vue项目搭建初始化项目...

little_blue_ljy的博客 1120

电子设计实战:用MOS管手把手搭建D触发器电路(含时序分析避坑指南)

本文详细介绍了如何使用MOS管从零开始搭建D触发器电路,重点解析了建立时间和保持时间等关键时序参数对电路稳定性的影响。通过实测波形分析和避坑指南,帮助电子工程师掌握D触发器的实际搭建技巧与优化方法,提升数字电路设计的可靠性。

x1y2z的博客 1163

webpack 从入门到工程实践

GitChat 作者:张旺 关注微信公众号:GitChat 技术杂谈 ,一本正经的讲技术 本文的初衷是和你一起理清`webpack`的使用逻辑,以便能更加容易的编写及拓展自己项目所需的配置文件。不过也得提前说明本文可能并不是一篇好的可以跟着操作的教程

技术杂谈 6584

PLUS模型土地利用变化模拟使用简介

因子包括自然因子如社会因子,通过计算整理得到新图层,并以tif文件输出到驱动因子的文件夹里,驱动因子文件夹里存放的是tif文件格式。线性回归使用提供的所有的LULC资源数据,可以选择往后预测的年数,选择好数据之后,可以得出预测的每一年的每一用地类型面积数据。在此过程之后,可以继续使用此CARS输入的数据继续模拟,也可返回二(3)中CARS模块,重新输入不同的年份预测。在此过程之后,可以继续使用此CARS输入的数据继续模拟,也可返回二(3)中CARS模块,重新输入不同的年份预测。

qq_42831270的博客 5810

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1152

webpack原理与实践

webpack

Garbrielle的博客 1030

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

文本实现ESP32S3 SparkBot与豆包大模型的RTC连续对话

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 4365

Webpack实践

Webpack实践webpack介绍和安装webpack介绍为什么需要webpack是什么有什么用webpack使用的名词与grunt/gulp的对比webpack使用环境准备安装Node.js安装NPM安装webpackwebpack配置使用测试环境搭建项目结构index.htmljswebpack.config.js(配置文件)初始化项目测试当前项目安装Webpack依赖包打包测试loader的使用实现CSS打包实现打包url资源(图片、gif、图标等)功能ES6转换为ES5语法plugin的使用添加版

输入技术、输出想法 824

数控系统(CNC)系列:Hurco VMX42SR_(3).控制系统硬件组成部分

控制箱是CNC系统的核心部分,负责处理所有的控制指令和数据。它通常包含主控板、电源模块、接口板等关键组件。伺服驱动器是CNC系统中的关键组件,负责将主控板发出的控制信号转换为电机所需的驱动电流。它通过闭环控制确保电机的精确运动。电机是CNC系统中的执行机构,负责实现主控板发出的运动指令。常见的电机类型包括步进电机和伺服电机。传感器是CNC系统中的重要组件,用于检测和反馈机床的运行状态。常见的传感器类型包括位置传感器、速度传感器、温度传感器等。电源供应系统为CNC系统的所有组件提供电力。主电源。

2401_87715305的博客 1281

第14.1章 高翔博士2025年11月最新开源框架Lightning-LM源码学习解读(一):激光-IMU定位+建图算法各模块简介

Lightning-LM:高效激光SLAM定位系统 该框架基于模块化设计,通过激光-IMU融合实现快速建图与定位,核心特点包括: 极速性能:纯CPU运行(建图1.2核/定位0.8核) 模块化架构:包含激光里程计(LIO)、地图管理、回环检测等独立模块 动态场景支持:地图分块加载、动静态图层分离 多模式适配:支持ROS2环境下的在线/离线运行 关键模块包括前端里程计(core/lio)、2D/3D地图转换(core/g2p5)、轻量优化库(core/miao)等,通过系统控制器(core/system)协调流

行知SLAM 2439

浅谈 webpack中基本的四个概念

webpack是一款JavaScript程序的打包器。在写JavaScript程序的时候,webpack将根据工程中各个模块的依赖关系,生成一个依赖关系的图,然后按照“依赖关系图”(dependency graph)把这些模块打包成“捆”(bundle),由浏览器加载bunlde,渲染页面。 入口起点(Entry)      所谓入口就是工程开始时的第一个(多个)要运行的脚本文件,通常它是依赖

qs8lk88的博客 1036

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Webpack最佳入门实践

webpack是洪水猛兽吗?这篇文章将会从浅显易懂介绍和深刻的实践两个角度带你认识webpack,让你知道webpack so easy!

あなたの可愛い41 943

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

webpack从入门到实践

hello大家好,我是小陈,我的理念是天下没有难学的知识,今天给大家带来webpack。 众所周知我们学习一个东西首先知道它是什么?好下面进入正题 webpack是什么? 答:本质上,webpack是一个现代 JavaScript 应用程序的静态模块打包器(通俗的话讲就是打包的) webpack 做什么事情? 答:分析你的项目结构,找到 JavaScript 模块以及其它的一些浏览器不能直接运行的扩展语言(Scss, TypeScript等),并将其打包为合适的格式以供浏览器使用等等。。。 webpac

weixin_45552968的博客 278

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

webpack 入门及实践

为什么80%的码农都做不了架构师?>>> ...

weixin_34236497的博客 105

webpack入门实践

2018年8月25日更新,目前 webpack 已经更新值 4.17.1 ,本文所用到的各种库或多或少有些过时,跟着代码操作下来可能会遇到各种问题,不过 webpack 的主体思想没变,所以还是希望本文对新学 webpack 的你,有所帮助。此外用基于 webpack 4.17.1 写了一个简单的demo,如果遇到啥问题,可以参考,之后应该会逐步来完善这个demo,如果有啥通用的想实现的功能,也...

郑廿三 294

webpack的入门实践,看这篇就够了

webpack的入门实践 什么是webpack Web浏览器使用HTML,CSS和JavaScript。随着项目的发展,跟踪和配置所有这些文件变得非常复杂,解决这个问题就需要一个新的工具 类似webpack的工具还有Grunt和Gulp,webpack是模块管理工具,把你的项目按照你的想法进行划分模块打包,举个最简单的例子,这个页面需要加载一个a.js和b.js,但是你只想加载一个js文件,就可以使用webpack将两个文件进行合并,当然webpack的功能不止于此,代码转化、项目优化、代码分割.

csjsz的博客 219

Webpack 5 Max 快速入门与实践

Webpack 5 Max 快速入门与实践 项目介绍 Webpack 5 Max 是一个基于 Webpack 5 的现代前端开发模板,专为 JavaScript、React 和 TypeScript 应用设计。它提供了一个完整的配置起点,包含了日常开发中所需的各种设置,以满足从简单的原型到复杂的生产级应用程序的需求。通过这个锅炉板,开发者可以迅速搭建新项目,并利用最新的构建优化功能。 项目快速启动...

gitblog_00983的博客 946

webpack入门实践再加上核心概念讲解

要先理解四个核心概念: 入口(entry) 输出(output) loader 插件(plugins)

Army-海军的博客 1万+

Webpack技术入门与实践

(1)一般项目里会包含多个单页应用,虽然多个单页应用也可以合并成一个但是这样做会导致用户没访问的部分也加载了,如果项目里有很多个单页应用,为每个单页应用配置一个entry 和 WebPlugin?(1)一个单页应用需要配置一个entry 指明执行入口,webpack会为entry 生成一个包含这个入口所有依赖的chunk,但要让它在浏览器里跑起来还需要一个HTML文件来加载chunk生成的js文件,如果提取出了css还需要让HTML文件引入提取出的css,

一个人的夏天 1297
上一篇: JS校验银行卡号
下一篇: Node应用进程管理器pm2的使用
向上爬的蜗牛
博客等级 码龄15年 20粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值