初始化

mkdir webpack-demo   ->新建文件夹  
cd webpack-demo  ->进入文件夹

  • 第一步 npm init -y  -> 初始化项目(生成package.js)
  • 第二步 npm install webpack webpack-cli --save-dev  ->(下载webpack与webpack-cil)

加载资源

  • CSS: npm install --save-dev style-loader css-loader
  • 图片: npm install --save-dev file-loader
  • 数据: npm install --save-dev csv-loader xml-loader
  • ES6解析: npm install -D babel-loader @babel/core @babel/preset-env
     npm i -D style-loader css-loader file-loader csv-loader xml-loader babel-loader @babel/core @babel/preset-env

目前为止学习的所有插件:

  • 第三步 @babel/core @babel/preset-env autoprefixer babel-loader css-loader file-loader html-webpack-plugin mini-css-extract-plugin postcss-loader style-loader webpack webpack-cli webpack-dev-server
  • ->(把以学过的所有插件加载下来)

下载本地服务器

  • 第四步 npm i webpack-dev-server -D  -> (dev-server会生成一个虚拟服务器)

进入监视模式: webpack --watch

  • 进入监视模式之后不需要再次输入 npm run build 保存文件自动刷新页面

server的命令

  • 在浏览器打开: webpack-dev-server --open
    改变端口号: webpack-dev-server --open --port 3000
    直接打开html: webpack-dev-server --open --port 8080 --contentBase src

server的配置

  devServer: { // 开发服务器的配置
  port: 3000, // 端口号
  progress: true, //
  contentBase: './dist', // 打开的文件路径
  open: true // 是否打开
  },

分离css的插件

  • 插件: npm i -D html-webpack-plugin
  • new MiniCssExtractPlugin({
    filename: 'main.css'
    })
  • use里配置: MiniCssExtractPlugin.loader

自动添加CSS3前缀的插件

  • 插件: npm i -D postcss-loader autoprefixer
  • 然后配置一个 postcss.config.js 的文件
  • module.exports = {
    plugins: [require('autoprefixer')]
    }

压缩CSS的插件

  • 插件: npm -D optimize-css-assets-webpack-plugin;
  • const optimizeCss = require('optimize-css-assets-webpack-plugin');
  • optimization: { // 优化项
    minimizer: [
    new optimizeCss()
    ]
    },

      

压缩JS的插件

  • 插件: npm -D uglifyjs-webpack-plugin;
  • const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
  • new UglifyJsPlugin({ // 压缩JS
    cache: true, // 是否缓存
    parallel: true, // 是否压缩多个
    sourceMap: true // es6的源码映射
    }),

      

解析ES6的插件

  • 插件: npm install -D babel-loader @babel/core @babel/preset-env
  • 插件2(解析更高级的语法ES7): npm i -D @babel/plugin-proposal-class-properties
  • 插件3: npm i -D @babel/plugin-transform-runtime 依赖: @babel/runtime -save
  • {
    test: /.js$/,
    use: {
    loader: 'babel-loader',
    options: { // babel-loader 把es6转换成es5
    presets: [
    '@babel/preset-env'
    ]
    }
    }
    },

      

    babel-loader: 解析es6的loader
    @babel/core: 模块
    @babel/preset-env: 把高级语法转换成es5的插件

JS代码效验插件

插件: npm i eslint eslint-loader -D

解析less

  • {
    test: /.less$/,
    use: [
    MiniCssExtractPlugin.loader,
    'css-loader',
    'postcss-loader',
    'less-loader'
    ]
    }

      

  

设置HtmlWebpackPlugin

  • 插件: npm install --save-dev html-webpack-plugin
  • new HtmlWebpackPlugin({
    template: './src/index.html',
    filename: 'index.html',
    minify: {
    removeAttributeQuotes: true, // 删除index里的双引号
    collapseWhitespace: true, // 折叠空行 变成一行
    },
    // hash: true // 哈希戳
    }),

      

webpack.config.js配置

  

  • const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin'); // 分离css的插件 module.exports = {
    mode: 'development', // 模式 默认两种 production-生产 development-开发
    entry: { // 入口
    index: './src/index.js'
    },
    devtool: 'inline-source-map', // 报错源
    module: {
    rules: [
    {
    test: /\.css$/,
    use: [
    MiniCssExtractPlugin.loader,
    'css-loader',
    'postcss-loader'
    ]
    },
    {
    test: /\.js$/, // normal 普通的
    use: {
    loader: 'babel-loader',
    options: { // babel-loader 把es6转换成es5
    presets: ['@babel/preset-env']
    }
    },
    include: path.resolve(__dirname, 'src'),
    exclude: /node_modules/
    },
    {
    test: /\.(png|svg|jpg|gif)$/,
    use: {
    loader: 'file-loader',
    options: {
    outputPath: '../imgs/'
    }
    }
    },
    { test: /\.(woff|woff2|eot|ttf|otf)$/, use: ['file-loader'] }
    ]
    },
    plugins: [
    new HtmlWebpackPlugin({ // 创建新的html
    template: './src/index.html',
    filename: 'index.html'
    }),
    new MiniCssExtractPlugin({
    filename: './css/main.css'
    })
    ],
    devServer: { // 打开浏览器
    contentBase: './dist',
    open: true,
    port: 3000,
    inline: true
    },
    output: { // 出口
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
    }
    }

      

  

package.json scripts配置

  "build": "webpack",
  "watch": "webpack --watch",
  "start": "webpack-dev-server --open",
  "server": "node server.js"

设置HtmlWebpackPlugin

  • 插件: npm install --save-dev html-webpack-plugin
  • 蓝文件夹: 
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    plugins: [
    new HtmlWebpackPlugin({
    title: 'Output Management'
    })
    ],

      

清理/dist文件夹

  npm install --save-dev clean-webpack-plugin
  const { CleanWebpackPlugin } = require('clean-webpack-plugin');
  new CleanWebpackPlugin(),

webpack4流程笔记的更多相关文章

  1. Spark任务流程笔记

    Spark学习笔记总结 02. Spark任务流程 1. RDD的依赖关系 RDD和它依赖的父RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide de ...

  2. webpack4.x笔记-配置基本的前端开发环境(一)

    webpack的基本使用 webpack 本质上是一个打包工具,它会根据代码的内容解析模块依赖,帮助我们把多个模块的代码打包.借用 webpack 官网的图片: 虽然webpack4.x的版本可以零配 ...

  3. webpack4 自学笔记三(提取公用代码)

    全部的代码及笔记都可以在我的github上查看, 欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/commonT ...

  4. webpack4 自学笔记五(tree-shaking)

    全部的代码及笔记都可以在我的github上查看, 欢迎star: https://github.com/Jasonwang911/webpackStudyInit/tree/master/ThreeS ...

  5. webpack4 自学笔记四(style-loader)

    全部的代码及笔记都可以在我的github上查看, 欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/css 引入- ...

  6. webpack4 自学笔记二(typescript的配置)

    全部的代码及笔记都可以在我的github上查看, 唤醒star: https://github.com/Jasonwang911/webpackStudyInit/tree/master/typesc ...

  7. webpack4 自学笔记一(babel的配置)

    所有代码都可以再我的github上查看,每个文件夹下都会有README.md,欢迎star: https://github.com/Jasonwang911/webpackStudyInit/tree ...

  8. memcached-1.4.20 主要启动流程笔记

    以下笔记主要是关注tcp模式下memcached的启动过程. main() 设置信号处理函数为sig_handler() 初始化系统设置,保存在全局变量settings里面 settings_init ...

  9. webpack4学习笔记(二)

    webpack打包各种javascript文件 (本文只是提供一个学习记录,大部分内容来自网络) 一,打包js文件和es6代码 1,webpack命令打包js文件 Tip: 在webpack4.x之前 ...

随机推荐

  1. how to download a file with Nodejs(without using third-party libraries)用node下载文件

    创建HTTP GET请求并将其管理response到可写文件流中: var http = require('http'); var fs = require('fs'); var file = fs. ...

  2. 8、泛型程序设计与c++标准模板库4.标准c++库中的算法

    标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够 ...

  3. grep的常用命令语法

    grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:"m y s t r i n g".这样做有两个原因,一是 ...

  4. matlab 矩阵运算技巧

    1.a=a(:) 作用:将矩阵转化成列向量 a=[a11 a12 a13                      a=[a11 a21 a12 a22 a13 a23]^T a21 a22 a23] ...

  5. Python 中的赋值、拷贝、引用

    在 python 中赋值语句总是建立对象的引用值,而不是复制对象.因此,python 变量更像是指针,而不是数据存储区域. 如图所示,当改变一个变量的值,另一个的值也会跟着改变.也就是浅拷贝. 若要实 ...

  6. jq中打开新页面 并获取携带值

    打开新页面:window.location.href = "./index.html?id=1"获取携带值: function GetRequest() { var url = l ...

  7. HTTP协议格式及基础

    HTTP请求数据: HTTP请求信息由3部分组成: ① 请求方法 URI 协议/版本 ② 请求头(Request Header) ③     请求正文 HTTP 请求 数据 例子举例: GET/sam ...

  8. return die exit 常用

    die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...

  9. nginx 安装遇到的问题

    今天想学学 nginx,于是先把它安装起来.按照 http://nginx.org/en/linux_packages.html 上面的方法,在我的 ubuntu 虚拟机上很容易地就安装好了.可是要运 ...

  10. Spark Streaming 官网上提到的几点调优

    总的来说,需要考虑以下两点: 1. 有效地运用集群资源去减少每个批次处理的时间 2. 正确的设置batch size,以使得处理速度能跟上接收速度 一.  为了减少处理时间,主要有以下几个优化点: 1 ...