• webpack配置 通俗易懂!一步一步会教你


    各位看官git上求个星星! 我有趣的前端笔记!!(webpack,babel,typescript,手撕排序算法等持续更新中!!)

    一、初步搭建

    1、初始化package.json

    yarn init -y
    npm init -y
    

    npm会比yarn多scripts 对象

    作用:便捷指令

    //package.json
    {
      "name": "demo1",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "scripts": {
        //"test": "echo "Error: no test specified" && exit 1"			//初始化生成
        "build": "webpack"																					//webpack命令
      },
      "keywords": [],
      "author": "",
      "description": ""
    }
    

    2、安装webpack

    使用开发者依赖即可

    yarn add -D webpack webpack-cli
    

    3、初步实现配置

    0、根目录下 创建webpack.config.js

    1、实现打包文件 自动生成html 并会在html中导入

    • 安装 html-webpack-plugin 包
    • webpack.config.js 导入包+plugins新建实例

    2、入口文件设置输出

    • 利用entry设置文件对应打包后的文件名
    entry:{
      index:'./src/index.js',
      home:'./src/home.js',
      page:'./src/page.js'
    }
    
    • 利用output重构打包后的文件名
    //会重新构成打包后的文件名
    //[name] 对应上面entry的key值
    //[hash] 随机生成的hash值 :8 是剪切前6位
    output:{
    	filename:'[name].[hash:8].js',
        
      //path控制输出文件夹的名字 [默认dist]
      path:path.join(__dirname,'release')			//前提导入path模块 需要用绝对路径!!
    },
    
    const path = require('path')
    const HtmlWebpack = require('html-webpack-plugin')
    module.exports = {
      //1.编译打包模式[production/development]
      mode: 'development',
      //2.入口文件设置{换而言之=>要打包的文件} //多入口写法
      entry: {
        index: './src/index.js',
        home: './src/home.js',
        page: './src/page.js'
      },
      //3.出口文件设置{对打包好的文件格式化文件名+修改出口文件夹}
      output: {
        filename: '[name].[hash:8].js',
        path:path.join(__dirname,'release')
      },
      //4.插件设置=>具体看文档 此处用到自动生成html
      //html中自动导入打包好的js
      //其中的template指向预定好的模板
      plugins: [
        new HtmlWebpack({
          template:'./src/index.html'
        })
      ]
    }
    

    二、进阶之loaders篇

    1、样式

    • style-loader 将模块的导出作为样式添加到 DOM 中

    • css-loader 解析 CSS 文件后,使用 import 加载,并且返回 CSS 代码

    • less-loader 加载和转译 LESS 文件

    • sass-loader 加载和转译 SASS/SCSS 文件

    在module中添加规则

    module:{
      rules:[
        {
          test:/.(css|less|scss)$/,
          use:['style-loader','css-loader','less-loader']
        }
      ]
    },
    

    注意:要使用 less-loader需要先安装 less-loader和 less

    补充:设置全局的颜色less,可在其他地方引用 @import xxx

    //base.less
    @primary-color:#ccc;
    @background-color:#000;
    
    //index.less
    @import './base.less';
    .haha{
      color: @primary-color;
      background-color:@background-color
    }
    

    2、如何build出对应的样式文件

    需要安装对应插件从 bundle 中提取文本(CSS)到单独的文件

    npm install --save-dev extract-text-webpack-plugin
    

    将webpack.config.js的module修改一下

    • 1、通过require引入该库
    • 2、先在plugins中注册一份ExtractTextPlugin
    • 3、将rules中每一项设置一个use
    //1.引入该库
    const ExtractTextPlugin = require("extract-text-webpack-plugin");
    
    module.exports={
      //...省略代码...
      
      //2.在plugins中注册一份ExtractTextPlugin
      plugins: [
         new ExtractTextPlugin("style.css")
      ],
      module:{
        //3.将rules中每一项设置一个use 
        //通过ExtractTextPlugin的extract-api 去指定loader
          rules:[
            {
              test:/.css$/,
              use:ExtractTextPlugin.extract({
                fallback: 'style-loader',
                use: 'css-loader'
              })
            },
            {
              test:/.less$/,
              // use:['style-loader','css-loader','less-loader']
              use:ExtractTextPlugin.extract({
                fallback: 'style-loader',
                //如果需要,可以在 sass-loader 之前将 resolve-url-loader 链接进来
                use: ['css-loader','less-loader']
              })
            }
          ]
       }
    }
    

    补充 :可能会报错DeprecationWarning: Tapable.plugin is deprecated. Use new API on '.hooks' instead

    此处只需将版本更新即可 npm install extract-text-webpack-plugin@next

    3、webpack转换typescript

    1、常规转换typescript方式

    • 通过全局安装 tsc
    • 在通过tsc编译ts文件 此时会在ts文件夹下 生成转换后的js文件
    //全局安装 tsc
    npm install -g tsc
    //tsc编译
    tsc xxx.ts
    

    2、webpack方式转换typescript

    • 安装ts-loader 和 typescript
    yarn add -D ts-loader typescript
    
    • 修改webpack.config.js文件下的module
      module:{
        rules:[
          {
            test:/.ts$/,
            loader:'ts-loader'
          }
        ]
      }
    
    • 添加一个 在根目录下tsconfig.json 文件 【固定写死】
    {
      "compilerOptions": {
        "sourceMap": true
      }
    }
    

    三、进阶之 热部署

    1、 概念:

    它允许在运行开发时更新各种模块,而无需进行完全刷新。

    换而言之:修改js,vue保存后,即可自动编译+刷新页面 无需重新手动编译

    2、热部署方式(1)

    • 引入 webpack const webpack = require('webpack');
    • 增加devServer项 【固定!】
    • plugins加入插件 new webpack.HotModuleReplacementPlugin()
        const HtmlWebpack = require('html-webpack-plugin')
    +		const webpack = require('webpack');
        module.exports = {
          entry:{
            index:'./src/index.js'
          },
          mode:'development',
    +     devServer:{
    +       contentBase:'./dist',
    +       hot:true
    +     },
          plugins:[
    +       new webpack.HotModuleReplacementPlugin(),	//需要在上方导入webpack
            new HtmlWebpack({
              title:'hot module',
              template:"./src/index.html"
            })
          ]
        }
    

    修改package.json 的 指令

    • 安装 热部署的库 npm install -D webpack-dev-server
    • 在scripts中添加dev指令 即运行 webpack-dev-server
      "scripts": {
        "build": "webpack",
        "dev": "webpack-dev-server"
      },
    

    注意❌:修改html并不能使用热部署!! 因为html并没有放在webpack.config.js文件中打包

    3、热部署方式(2)

    此处放置通过 Node.js API官网链接 实用起来感觉没必要(东西太多+我懒~~)

    四、开发和生产环境的不同配置方法

    1、定义

    开发环境:dev

    生产环境:build

    常用命令 webpack.config.js
    开发环境 dev mode:'development'
    生产环境 build mode:'production'

    2、同时配置方法

    设置两个不同的 webpack.prod.config.js 即可 注意 名字不能相同!!!

    修改其中的 mode

    • 开发环境下的mode =》mode:'development'

    • 生产环境下的mode =》mode:'production'

    修改package.json的命令入口文件

      "scripts": {
        "build": "webpack --config webpack.prod.config.js",
        "dev": "webpack-dev-server --config webpack.config.js"
      },
    

    五、手动配置vue的webpack

    1、安装vue包和对应的loader

    npm install -D vue-loader vue vue-template-compiler
    npm install -D babel-loader @babel/core
    

    2、配置webpack.config.js

    要想在vue中使用 less lang="less"

    <style lang="less" scoped>
      .contain{
        font-size: 20px;
        .first{
          color: red;
        }
        .second{
          color: brown;
        }
      }
    </style>
    

    需要修改webpack.config.js

    //webpack.config.js   
    		const HtmlWebpack = require('html-webpack-plugin')					//build生成html
        const webpack = require('webpack')
    +   const VueLoaderPlugin = require('vue-loader/lib/plugin')		//vue的loader
        module.exports = {
          mode:'development',
          entry:'./src/index.js',
          //热部署
          devServer:{
            contentBase:'./dist',
            hot:true
          },
          module: {
            rules: [
    +         {
    +           test: /.vue$/,
    +           loader: 'vue-loader'
    +         },
              // 它会应用到普通的 `.js` 文件
              // 以及 `.vue` 文件中的 `<script>` 块
    +         {
    +           test: /.js$/,
    +           loader: 'babel-loader'
    +         },
              // 它会应用到普通的 `.css` 文件
              // 以及 `.vue` 文件中的 `<style>` 块
              {
    +           test: /.css$/,
    +           use: [
    +             'vue-style-loader',
    +             'css-loader'
    +           ]
              }
            ]
          },
          plugins:[
            //vueloader插件注册
    +       new VueLoaderPlugin(),			
            new webpack.HotModuleReplacementPlugin(),
            new HtmlWebpack({
              template:'./src/index.html'
            })
          ]
        }
    

    六、手动配置React的webpack

    1、安装react包和对应的loader

    注意:babel-loader一定要装上 @babel/core

    yarn add react react-dom	
    yarn add -D babel-loader @babel/core
    yarn add @babel/preset-env --dev
    yarn add @babel/preset-react --dev
    

    2、配置webpack.config.js

    添加在 module中添加 rules

      module.exports = {
      mode:'development',
      entry:'./src/index.js',
      module:{
    +  rules:[
    +     {
    +       test:/.(js|jsx)$/,
    +       use:[{
    +         loader:"babel-loader",
    +          options:{
    +            presets:[
    +              "@babel/preset-react",
    +              "@babel/preset-env"
    +            ]
    +          }
    +        }]
    +      }]
    +  	 }
    +  }
    	}
    

    七、总结

    1、匹配css与less文件 对应所需的loader

    css less scss
    loader style-loader
    css-loade
    style-loader
    css-loader
    less-loader
    style-loader
    css-loader
    sass-loader

    2、两种匹配写法(简单法/可提取css文件法)

    基本写法

    {
            test:/.css$/,
            use:[
              "style-loader",
              "css-loader"
            ]
          },
          {
            test:/.less$/,
            use:[
              "style-loader",
              "css-loader",
              "less-loader"
          	]
    			}
    }
    

    可提取css文件法

    上面已经出现 请按住ctrl 点击查看

  • 相关阅读:
    ibatis常用sql
    在eclipse中部署maven项目的问题
    如何成为一个设计师和程序员混合型人才
    一个程序员的读书笔记:程序设计的反思
    C# 中的 == 和 equals()有什么区别?
    2014百度之星资格赛解题报告:能量变换
    2014百度之星资格赛解题报告:Xor Sum
    2014百度之星资格赛解题报告:Labyrinth
    那些年我们一起追过的ACM
    最新全球排名前50网站前端开发语言统计
  • 原文地址:https://www.cnblogs.com/cc123nice/p/13419845.html
Copyright © 2020-2023  润新知