zoukankan      html  css  js  c++  java
  • webpack详细介绍以及配置文件属性!

    1、webpack简单介绍

    (1)webpack是一个用于实现前端模块化开发工具,可帮助我们自动打包编译成浏览器能够识别的代码 ;同时支持commonjs规范 以及es6的import规范; 同时具备各种常见语言编译(需要安装插件和loader)等功能。

    (2)在使用webpack时 需要使用配置文件 ,名字如下: webpack.config.js

    (3)安装 npm i webpack@3.11.0 -g,需要安装的本地web服务器  webpack-dev-server 版本号为: 2.9.7,在webpack.config.js 文件中对devServer属性进行配置,然后运行命令 webpack-dev-server --inline 启动即可,注意 webpack 和webpack-dev-server 需要全局安装

    (4)webpack 配置:入口、出口、规则、插件

    (5)在使用html-webpack-plugin 时 由于该模块依赖于webpack,  所以 在项目本地还需要安装一个webpack, 版本同样时3.11.0 

    (6) 命令 webpack-dev-server --inline 的作用仅为在本地预览开发效果,  本身并不包含编译的功能 ,如果需要将开发完成的代码上线  需要执行webpack 才能将代码编译到dist目录当中

    (7)提取样式代码到单独的文件中

      第一步  安装提取器 extract-text-webpack-plugin  第二步 配置loader   loader:Ext.extract("xxx-loader")  第三步 配置输出文件名  plugins : [new Ext("xxx.css")]

    (8)__filename变量:node.js中,在任何模块文件内部,可以使用__filename变量获取当前模块文件的带有完整绝对路径的文件名。

    __dirname :获得当前文件所在目录的完整目录名

    2、配置文件属性

    const path = require("path"); // node 模块 处理路径逻辑
    const htmlWebpackPlugin = require("html-webpack-plugin"); //该模块用于自动复制html文件到dist当中,操作HTML
    const openBrowserWebpackPlugin = require("open-browser-webpack-plugin"); // 打开浏览器
    const extractTextWebpackPlugin = require("extract-text-webpack-plugin") // 安装提取器,抽离样式 样式独立出去

    module.exports = {
      entry:[ "./src/main.js"],    //声明项目入口文件  entry : __dirname + "/src/main.js",
      output:{    //配置编译后的文件
        path:path.resolve(__dirname,'dist'),
        filename:"js/[name].[hash:8].js", // 生成 hash规则解密解析的长度为8 的随机字符串 阻止浏览器缓存
        publicPath:"", // 公共路径 上线需要配置
      },
      //output : { //配置编译后的文件
             // path : __dirname + "/dist", //配置文件所在目录
             //filename : "index.js" //配置文件名
         },
      devtool:"source-map",  //开启资源地图模式  方便调试  让浏览器控制台能够准确指向编译前是哪个文件报错
      resolve:{
        alias:{ // 别名
          'vue':'vue/dist/vue.js'
        }
      },
    module:{
      rules:[
        {
          test:/.js$/,
          exclude:/node_modules/,
          use:['babel-loader']
        },
        {
          test:/.(png|gif|svg|jpg|woff|woff2|eot|ttf)??.*$/,
          use:["url-loader?limit=8192&name=font/[hash:8].[name].[ext]"] // 8M ext扩展名
        },
        {
          test:/.(css|scss)$/,
          use:extractTextWebpackPlugin.extract({
          fallback:"style-loader", // 转化为 node 风格代码
          use:[ "css-loader", // css 转化为 commonJs模块
            {
              loader:"postcss-loader", // 模块
              options:{
                plugins:function(){
                  return [
                    require("cssgrace"), // 美化 css
                    require("autoprefixer")() // 自动补全 实现兼容
                     ]
                }
              }
            },
            "sass-loader" // 编译 scss 为 css 代码
            ],
          })
        },
        {
          test:/.(css|less)$/,
          use:extractTextWebpackPlugin.extract({
          fallback:"style-loader", // 转化为 node 风格代码
          use:[ "css-loader", // css 转化为 commonJs模块
            {
            loader:"postcss-loader", // 模块
          options:{
            plugins:function(){
                return [
                require("cssgrace"), // 美化 css
                // require('postcss-px2rem-exclude')(
                // {
                // remUnit:100,
                // exclude:/element-ui/i, // 排除 mint-ui 不需要进行 rem 转换
                // }
                // ), // px 转 rem
                require("autoprefixer")() // 自动补全 实现兼容
                ]
              }
            }
        },
        "less-loader" // 编译 scss 为 css 代码
          ],
        })
        },
        {
          test:/.vue$/,
          loader:'vue-loader',
          options:{
            loaders:[
              {'css':'style-loader!css-loader'},
              {'scss':'style-loader!css-loader!sass-loader'},
              {'less':'style-loader!css-loader!less-loader'},
            ]
          }
        }
       ]
    },
    devServer:{
      contentBase:path.join(__dirname,"dist"),    // contentBase : __dirname + "/dist/", //指定本地web服务根路径
      compress:true,
      hot:true,
      inline:true,//开启自动刷新
      host:"0.0.0.0",
      port:7000,//设置端口号
      // open:true,
      publicPath:"",
      proxy:{ // 代理

      },
      // historyApiFallback:true // 处理 history 路由模式
    },
    plugins:[
      new htmlWebpackPlugin({
        template:"./src/index.html", //声明 编译 HTML 文件
        inject:true, // 自动注入 css/js link script
      }),
      new openBrowserWebpackPlugin({url:"http://localhost:7000"}),
      new extractTextWebpackPlugin({
        filename:'css/app.[hash:8].css',
        allChunks:true , // 抽离所有的数据
        disable:false // true 无法样式抽离
      })
      ]
    }

    3、react配置webpack文件

    let webpack= require("webpack")
    let Hwp = require("html-webpack-plugin")
    let Ext = require("extract-text-webpack-plugin")

    module.exports = {
      entry : __dirname + "/src/main.js",
      output : {
        path : __dirname + "/dist/",
        filename : "app.js",
        publicPath : "/"
      },
      devtool : "source-map",
      devServer : {
        contentBase : __dirname + "/dist/",
        port : 3000,
        inline : true,
        publicPath : "/",
        historyApiFallback : true,
        disableHostCheck : true,
        proxy : {
          "/zhuiszhu" : {
            target : "http://39.105.136.190:3000"
          }
        }
    },
    module : {
      rules : [
        {test : /.js$/ , exclude : /node_modules/ ,loader : "babel-loader"},
        {test : /.less$/,loader :Ext.extract("css-loader!less-loader")},
        {test : /.css$/,loader :Ext.extract("css-loader")},
      ]
    },
    plugins : [
      new webpack.ProvidePlugin({
        React : "react"
      }),
      new Hwp({
        template : "index.html",
        filename : "index.html",
        inject : true
      }),
      new Ext("app.css")
      ]
    }
     
    4、vue配置webpack文件
    let Hwp = require("html-webpack-plugin")
    let Ext = require("extract-text-webpack-plugin")

    module.exports={
      entry:__dirname+"/src/main.js",
      output:{
        path:__dirname+"/dist/",
        filename:"app.js"
      },
      devtool:"source-map",
      devServer:{
        contentBase:__dirname+"/dist/",
        port:3000,
        inline:true,
        proxy:{
          "/zhuiszhu":{
            target:"http://39.105.136.190:3000"
          }
        }
      },
      resolve:{
        alias:{
          "vue":"vue/dist/vue.js"
         }
      },
    module:{
      rules:[
        {test:/.css$/,loader:Ext.extract("css-loader")},
        {test:/.less$/,loader:Ext.extract("css-loader!less-loader")},
        {test:/.html$/,loader:"string-loader"},
        {test:/.js$/,exclude:/node_modules/,loader:"babel-loader"},
      ]
    },
    plugins:[
      new Hwp({
        template:"src/index.html",
        filename:"index.html",
        inject:true
      }),
      new Ext("app.css")
      ]
    }
     
    5.补充webpack知识讲解

    webpack是一个用于实现前端模块化开发工具 可帮助我们自动打包编译成浏览器能够识别的代码
    同时支持commonjs规范 以及es6的import规范

    同时具备各种常见语言编译(需要安装插件和loader)等功能


    在使用webpack时 需要使用配置文件
    名字如下: webpack.config.js

    1 安装 : 全局安装
    推荐使用版本: 3.11.0
    npm i webpack@3.11.0 -g


    运行命令
    webpack

    配置文件属性

    entry : 配置入口文件
    output : {
    path : "", //输出路径
    filename : "" //输出文件名
    },
    devtool : "source-map" , //开启资源地图模式
    devServer : { //webpack-dev-server 服务相关配置
    contentBase : "",//服务器根目录,
    port : 3000,//端口号,
    inline : true,//自动刷新,
    proxy : { //配置服务器代理
    "pathname" : {
    target : "目标服务器地址"
    }
    }
    },
    module : {
    rules : [ //loader相关配置
    {
    test: xxx,// 正则对象,匹配相应文件
    exclude : yyy,// 正则对象,过滤掉不需要编译的部分
    loader : "", //需要使用到的loader
    }
    ]
    },
    plugins : [ //配置各种插件

    ]
    }


    常见插件用法
    全局变量:
    let webpack = require("webpack")

    plugins : [
    new webpack.ProvidePlugin({
    React : "react"
    })
    ]

    css文件提取
    let Ext = require("extract-text-webpack-plugin")


    loader配置:
    {test:/.css$/,loader:Ext.extract("css-loader")}

    plugins : [
    new Ext("app.css")
    ]

    html文件自动复制
    let Hwp = require("html-webpack-plugin")

    plugins : [
    new Hwp({
    template : "index.html" ,//源html文件路径
    filename : "index.html",//自动输出到output所指向的目录
    inject : true , //自动引入所需要的标签 比如link 比如script
    })
    ]

  • 相关阅读:
    使用crypto-js对数据进行加密 解密
    immutable 入门基础
    Redux与mobx对比我们应该如何选择?
    Redux使用实例/学习笔记
    java踩坑之mysql时区与系统不同步问题
    Spring Boot学习之初识Spring Boot
    Spring MVC之表单标签库和校验注解
    Spring MVC之自定义数据转换器和REST
    Spring MVC之数据绑定和模型数据解析
    Spring MVC 之什么是Spring MVC?
  • 原文地址:https://www.cnblogs.com/lishixiang-007/p/11286162.html
Copyright © 2011-2022 走看看