基本是学习的时候在网上整理的资料,并非自己原创,这篇文章的的主要目的是记录webpack.config.js的配置方式.可能也有不少错误,欢迎指正!!

一、应用场景

前端模块化开发、功能拓展、css预处理等需求导致项目中的文件数目变得更多,层级也更复杂.

二、主要职能

webpack的工作主要是打包,分为三个环节:匹配、处理、打包.

三、配置文件-webpack.config.js

在项目的根目录新建一个webpack.config.js文件告诉webpack该做的事.

module.exports={//入口文件的配置项
    entry:{},//出口文件的配置项
    output:{},//解读CSS,图片如何转换,压缩等配置
    module:{},//项目依赖
    plugins:[],//配置webpack开发服务功能
    devServer:{}
}

四、配置项分析

1.entry-入口项配置.

我们需要压缩的文件,比如js、css、less文件等

entry:{//里面的entery是可以随便写的entry:'./src/entry.js'
},

2.output-出口项配置

压缩完成后文件名和地址

(1)._dirname:node中path对象的一个属性,获取当前文件的绝对路径.打包路径表示需要最终把打包好的文件生成在哪里,所以需要根据webpack.config.js的绝对位置来判断.为了不写死,我们需要动态获取绝对位置,就有用到这一属性(2)path.resolve('a','b'):path对象的一个方法,将两个字符串拼接成一个新路径(自带一些优化功能,不仅仅是字符串拼接).(3)path:以上两个都要依赖于path模块,所以要先通过require('path')导入path模块.
const path = require('path');output:{//打包的路径path:path.resolve(__dirname,'dist'),//打包的文件名称filename:'bundle.js'}

 

整个过程的意义就是,告诉webpack,我要你把入口配置好的所以文件给我压缩成名叫"bundle.js"的文件,放在路径"path"处

3.多入口、多出口文件打包

const path = require('path');
module.exports={entry:{//为了区别不同的入口,需要不同的属性名entry:'./src/entry.js',//这里我们又引入了一个入口文件entry2:'./src/entry2.js'},output:{path:path.resolve(__dirname,'dist'),//输出的文件名称,[name]会自动获取入口文件中的文件名,不同的文件就能拿到不同的文件名
        filename:`[name].js`},module:{},plugins:[],devServer:{}
}

4.同时压缩js文件和css文件

先下载处理器npm install --save -dev css-loader style-loader sass-loader less-loader postcss-loader
const path = require('path');
module.exports={entry:{
//入口文件并没有css文件?可以在entry.js中引入css文件,方便webpack进行同步压缩entry:'./src/entry.js',entry2:'./src/entry2.js'},output:{path:path.resolve(__dirname,'dist'),filename:`[name].js`},//webpack能识别css文件,但是你必须得告诉它我这里有css文件,所以在这里你要告诉它哪些文件是css文件
    module:{//它表示哪种类型的文件用哪种处理器(处理器?原来有吗?没有!所以需要下载,需要执行下载的语法)
    rules:[//匹配到.css结尾的文件,就先调用对应的处理器{test: /\.css$/, loader: "style!css?sourceMap!postcss"},{test: /\.less$/, loader: "style!css!less|postcss"},{test: /\.scss$/, loader: "style!css!sass|postcss"}]
]
},plugins:[],devServer:{}
}

还有其他的处理器,根据需求下载和匹配

  • css-loader 处理css中路径引用等问题
  • style-loader 动态把样式写入css
  • sass-loader scss编译器
  • less-loader less编译器
  • postcss-loader scss再处理
  • babel-loader js处理器这里需要配置(exclude)
  • jsx-loader
  • url-loader
  • file-loader
  • json-loader
  • raw-loader
 

4.plugins-插件依赖

想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 来创建它的一个实例。
先下载处理器npm install --save -dev css-loader style-loader sass-loader less-loader postcss-loader
const path = require('path');
//导入需要的插件
const HtmlWebpackPlugin = require('html-webpack-plugin'); const webpack = require('webpack'); module.exports={ entry:{ entry:'./src/entry.js', entry2:'./src/entry2.js' }, output:{ path:path.resolve(__dirname,'dist'), filename:`[name].js` }, module:{ rules:[ {test: /\.css$/, loader: "style!css?sourceMap!postcss"}, {test: /\.less$/, loader: "style!css!less|postcss"}, {test: /\.scss$/, loader: "style!css!sass|postcss"}  ] }, plugins:[
//打包js文件new webpack.optimize.UglifyJsPlugin(),
//entry.html未模板生成一个html5文件new HtmlWebpackPlugin({template:'./src/entry.html'})],devServer:{}
}

5.devServer-虚拟服务器

  • 在开发模式下,DevServer 提供虚拟服务器,让我们进行开发和调试。
  • 而且提供实时重新加载。简直美滋滋。大大减少开发时间。
  • 它不是 webpack 内置插件哦,要安装!!!
先下载处理器npm install --save -dev css-loader style-loader sass-loader less-loader postcss-loader

安装server插件
npm install webpack-dev-server --save-dev
 
const path = require('path');
//导入需要的插件
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
module.exports={
entry:{entry:'./src/entry.js',
entry2:'./src/entry2.js'},
output:{
path:path.resolve(__dirname,'dist'), filename:`[name].js`},module:{
rules:[
{test: /\.css$/, loader: "style!css?sourceMap!postcss"},
{test: /\.less$/, loader: "style!css!less|postcss"},
{test: /\.scss$/, loader: "style!css!sass|postcss"} ]
}, plugins:[
//打包js文件new webpack.optimize.UglifyJsPlugin(),
//entry.html未模板生成一个html5文件new HtmlWebpackPlugin({template:'./src/entry.html'})],
//这里只列出部分参数,还有许多参数
    devServer: {//如果为 true ,页面出错不会弹出 404 页面。如果为 {...} , 看看一般里面有什么。historyApiFallback: true,  //热模块更新作用。即修改或模块后,保存会自动更新,页面不用刷新呈现最新的效果(实际功能是自动添加HMR这个插件) hot: true,//如果为 true ,开启虚拟服务器时,为你的代码进行压缩。加快开发流程和优化的作用。  compress: true, //写主机名的。默认 localhosthost: 'localhost',//端口号。默认 8080 port: 8080
}

五.本地服务器

在 package.json 配置下,方便使用
"scripts": {"dev": "webpack-dev-server" // 运行命令会自动在node_modules文件夹找 webapck-dev-server模块。"dev"就是你命令中run后面的词,你也可以换成"server"等词,不过对应的命令就得换成"npm run server"等}

如果没在 package.json 配置且还是局部安装,你就要在命令行输入 node_modules/.bin/webpack-dev-server。若你 package.json 配置好了,在命令行输入npm run dev

 

转载于:https://www.cnblogs.com/Shyno/p/11011509.html

webpack核心提炼相关推荐

  1. Webpack 核心开发者 Sean Larkin 盛赞 Vue

    dev.io 近日邀请了 Webpack 核心开发者 Sean Larkin 回答开发者提问,其中几个问提比较有意思,和掘金的小伙伴们分享一下. 先上点前菜: 有一个开发者问 Sean 如何成为一个热 ...

  2. 深入理解Webpack核心模块Tapable钩子[异步版]

    接上一篇文章 深入理解Webpack核心模块WTApable钩子(同步版) tapable中三个注册方法 1 tap(同步) 2 tapAsync(cb) 3 tapPromise(注册的是Promi ...

  3. Webpack核心概念解析

    原文链接:banggan.github.io/2019/05/09/- Webpack核心概念解析 终于忙完了论文,可以愉快的开始学习了,重拾起重学前端.webpack以及Vue的源码解读作为入职前的 ...

  4. reactjs使用eject暴露webpack核心配置

    reactjs使用eject暴露webpack核心配置

  5. babel原理_手写webpack核心原理,再也不怕面试官问我webpack原理

    手写webpack核心原理 一.核心打包原理 1.1 打包的主要流程如下 1.2 具体细节 二.基本准备工作 三.获取模块内容 四.分析模块 五.收集依赖 六.ES6转成ES5(AST) 七.递归获取 ...

  6. 深入理解Webpack核心模块Tapable钩子[同步版]

    记录下自己在前端路上爬坑的经历 加深印象,正文开始- tapable是webpack的核心依赖库 想要读懂webpack源码 就必须首先熟悉tapable ok.下面是webapck中引入的tapab ...

  7. 关于Webpack前端工程化构建,你必须要掌握这些核心知识点

    引言 在很久之前,模块化管理还没有出现,如果我们开发一个页面想要引入一些依赖的话,最常见的做法就是将依赖文件引入到.html文件中.比如,我们要使用JS的一些依赖库,就要在.html文件中使用< ...

  8. Webpack系列-第一篇基础杂记

    系列文章 Webpack系列-第一篇基础杂记 Webpack系列-第二篇插件机制杂记 Webpack系列-第三篇流程杂记 前言 公司的前端项目基本都是用Webpack来做工程化的,而Webpack虽然 ...

  9. Webpack 的简单介绍

    本文介绍了一些 webpack 的核心概念以及一些概念术语,并对核心配置做了一些简单的用法讲解.建议刚刚接触 Webpack 的朋友可以先了解一下.想了解更多 Webpack 使用以及配置的话可以参考 ...

  10. webpack 原理图_webpack打包原理

    展开全部 将根据文件间32313133353236313431303231363533e78988e69d8331333433643638的依赖关系对其进行静态分析,然后将这些模块按指定规则生成静态资 ...

最新文章

  1. ASP.NET之对称算法加密
  2. tensorflow2版本学习教程1-mnist数据集手写字体
  3. 解决spring的xml文件cannot be open ( class path resource cannot be opened)
  4. YOUR GUIDE TO Lowering YourCholesterol With TLC学习笔记(暂时没有完成)
  5. C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))
  6. 【华为大咖分享】10.DevOps敏捷测试之道(后附PPT下载地址)
  7. Docker问题:Dockerfile的From之前不能使用ARG
  8. 参数化曲线-微分几何
  9. 用层次分析法解决购买笔记本电脑的问题
  10. opencv-图像处理1 图像基本操作
  11. Origin画图技巧之回归(标准值与预测值)
  12. 编码的奥秘:手电筒剖析
  13. 小程序uniapp实现左滑删除效果
  14. 操作系统学习笔记(二十八)~文件系统+连续分配+链接分配+索引分配+空闲空间管理
  15. [eval函数利用]
  16. linux的睡眠框架及实现
  17. IDEA中如何正确快速打jar包(包括瘦包、胖包)
  18. 模拟乘客进站流程 python
  19. 两化融合贯标有什么好处
  20. 关于车载TBox的功能认知

热门文章

  1. 老大,我想获取MySQL插入数据的自增ID,该怎么弄?
  2. Netty高性能之道
  3. Java集合框架介绍
  4. 最实用也最容易被遗忘的 Linux 命令行使用技巧
  5. 微型计算机的软件系统分为哪几类,系统软件分为哪几类?各有什么特点?
  6. WPF快速入门系列(9)——WPF任务管理工具实现
  7. STM8串口初始化寄存器配置
  8. 手机页面rem响应式布局
  9. ubuntu 安装搜狗拼音输入法
  10. 撩开云计算神秘面纱之阿里云弹性计算服务篇