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

一、应用场景

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

二、主要职能

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

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

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

  1. module.exports={
  2. //入口文件的配置项
  3. entry:{},
  4. //出口文件的配置项
  5. output:{},
  6. //解读CSS,图片如何转换,压缩等配置
  7. module:{},
  8. //项目依赖
  9. plugins:[],
  10. //配置webpack开发服务功能
  11. devServer:{}
  12. }

四、配置项分析

1.entry-入口项配置.

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

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

2.output-出口项配置

压缩完成后文件名和地址

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

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

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

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

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

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

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

  • 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
  1.  

4.plugins-插件依赖

  1. 想要使用一个插件,你只需要 require() 它,然后把它添加到 plugins 数组中。
    多数插件可以通过选项(option)自定义。你也可以在一个配置文件中因为不同目的而多次使用同一个插件,这时需要通过使用 new 来创建它的一个实例。
  1. 先下载处理器
    npm install --save -dev css-loader style-loader sass-loader less-loader postcss-loader
  1. const path = require('path');
  2. //导入需要的插件
  3. 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"}
    ]
    },
  4. plugins:[
  5. //打包js文件
  6. new webpack.optimize.UglifyJsPlugin(),
  7. //entry.html未模板生成一个html5文件
  8. new HtmlWebpackPlugin({template:'./src/entry.html'})
  9.  
  10. ],
  11. devServer:{}
  12. }

5.devServer-虚拟服务器

  • 在开发模式下,DevServer 提供虚拟服务器,让我们进行开发和调试。
  • 而且提供实时重新加载。简直美滋滋。大大减少开发时间。
  • 它不是 webpack 内置插件哦,要安装!!!
  1. 先下载处理器
    npm install --save -dev css-loader style-loader sass-loader less-loader postcss-loader
  2.  
  3. 安装server插件
  4. npm install webpack-dev-server --save-dev
  1.  
  1. const path = require('path');
  2. //导入需要的插件
  3. const HtmlWebpackPlugin = require('html-webpack-plugin');
  4. const webpack = require('webpack');
  5. module.exports={
  6. entry:{
  7. entry:'./src/entry.js',
  8. entry2:'./src/entry2.js'
  9. },
  10. output:{
  11. path:path.resolve(__dirname,'dist'), filename:`[name].js`
  12. },
  13. module:{
  14. rules:[
  15. {test: /\.css$/, loader: "style!css?sourceMap!postcss"},
  16. {test: /\.less$/, loader: "style!css!less|postcss"},
  17. {test: /\.scss$/, loader: "style!css!sass|postcss"}
  18. ]
  19. },
  20. plugins:[
  21. //打包js文件
  22. new webpack.optimize.UglifyJsPlugin(),
  23. //entry.html未模板生成一个html5文件
  24. new HtmlWebpackPlugin({template:'./src/entry.html'})
  25.  
  26. ],
  27. //这里只列出部分参数,还有许多参数
  28. devServer: {
  29. //如果为 true ,页面出错不会弹出 404 页面。如果为 {...} , 看看一般里面有什么。
  30. historyApiFallback: true,
  31. //热模块更新作用。即修改或模块后,保存会自动更新,页面不用刷新呈现最新的效果(实际功能是自动添加HMR这个插件)
  32. hot: true,
  33. //如果为 true ,开启虚拟服务器时,为你的代码进行压缩。加快开发流程和优化的作用。
  34. compress: true,
  35. //写主机名的。默认 localhost
  36. host: 'localhost',
  37. //端口号。默认 8080
  38. port: 8080
  39. }

五.本地服务器

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

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

  1.  

webpack核心提炼的更多相关文章

  1. 前端进阶必读:《JavaScript核心技术开发解密》核心提炼二

    前言 最近读勒基本关于前端的数据<JavaScript核心技术开发解密>,<webpack从入门到进阶>...这几本书帮助到我更好的理解JS.webpack在前端技术领域中的作 ...

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

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

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

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

  4. webpack核心模块tapable源码解析

    上一篇文章我写了tapable的基本用法,我们知道他是一个增强版版的发布订阅模式,本文想来学习下他的源码.tapable的源码我读了一下,发现他的抽象程度比较高,直接扎进去反而会让人云里雾里的,所以本 ...

  5. webpack核心概念

    一.webpack四个核心概念 1.入口[Entry] webpack将创建所有应用程序 依赖关系图表.图表的起点被称之为 入口起点.入口起点告诉webpack从哪里开始,并遵循着依赖关系图表知道打包 ...

  6. Webpack 核心模块 tapable 解析(转)

        原文出自:https://www.pandashen.com 前言 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器,是对前端项目实现自动化和优化必不可少的工具,We ...

  7. webpack核心模块tapable用法解析

    前不久写了一篇webpack基本原理和AST用法的文章,本来想接着写webpack plugin的原理的,但是发现webpack plugin高度依赖tapable这个库,不清楚tapable而直接去 ...

  8. webpack(2)webpack核心概念

    前言   本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具.当 webpack 处理应用程序时,它会在内部构建一个 依赖图(dependency graph) ...

  9. webpack--初试webpack( 核心、体验、资源打包)

    前言 webpack是当前前端项目中最常用的资源构建工具,从本文开始,来总结记录一下关于webpack的学习. 正文 1.webpack简介 webpack官网(https://webpack.doc ...

随机推荐

  1. 洛谷 P1843 奶牛晒衣服

    题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣服就成了很不爽的事情. 题目描述 熊大妈请你帮助完成这个重任 . 洗完衣服后 , 你就要弄干衣服 . 衣服在自然条件下用 ...

  2. 虚拟机+centOS挂载ISO步骤

    https://blog.csdn.net/u010612373/article/details/52240447

  3. hpu第六次周赛Problem F

    Problem F Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  4. 解决MYSQL的You can't specify target table 'xxxxxxxxxx' for update in FROM clause

    出现这个问题的MYSQL的SQL语句形如: DELETE FROM xxxxa WHERE EXISTS (SELECT * FROM xxxx1 WHERE xxxxa.xxid=123) 解决方法 ...

  5. 在centos7上安装DSPC

    感谢朋友支持本博客.欢迎共同探讨交流,因为能力和时间有限.错误之处在所难免,欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  6. springmvc 解析xml数据

    springmvc 解析xml数据 http://blog.csdn.net/zhi_jun/article/details/37925475

  7. mongodb mapreduce使用总结

    文章来自本人个人博客: mongodb mapreduce使用总结 ​ 大家都知道,mongodb是一个非关系型数据库.也就是说.mongodb数据库中的每张表是独立存在的,表与表之间没有不论什么依赖 ...

  8. Hdu oj 1012 u Calculate e

    分析:注意格式. #include<stdio.h> int main() { int i,j,k; double sum=0; printf("n e\n- --------- ...

  9. 查看及改动Oracle编码格式方法

     首先查看oracle数据库的编码 SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET ...

  10. python mysql数据库 'latin-1' codec can't encode character错误问题解决

    "UnicodeEncodeError:'latin-1' codec can't encode character ..."     This is because MySQLd ...