• webpack从零到一(1)


    使用webpack4+,所以推荐 node版本8.5以上

    在webpack中所有文件都被当成模块

    初始化package.json

    npm init -y

    全局安装webpack(开发不推荐使用)

    npm install webpack -g

    本地安装

    npm install webpack webpack-cli -D
    

      webpack4.0+ 需要安装 webpack-cli 插件,-D 代表 开发的时候使用,发布时不会使用到。

    在webpack中所以文件都是模  -js 模块 模块化(AMD CMD es6Module commonjs)

    npx webpack  

    直接允许webpack,会允许node_modules 对应的bin下的webpack.cmd

    webpack 配置

    文件名:webpack.config.js

      需要导入的模块

    const path = require('path');
    const HtmlWebpackPlugin = require('html-webpack-plugin');//自动打包html到生产目录文件下
    const {CleanWebpackPlugin } = require('clean-webpack-plugin');//自动清除文件
    const Webpack = require('webpack');
    const ExtractTextWebpackPlugin = require('extract-text-webpack-plugin')//抽离成css文件
    const cssExtract = new ExtractTextWebpackPlugin('css/index.css')
    const css1Extract = new ExtractTextWebpackPlugin('css/main.css')
    const PurifycssWebpack = require('purifycss-webpack')//清除多余的样式
    const glob = require('glob')//搜索样式
    const CopyWebpackPlugin = require('copy-webpack-plugin')//拷贝作用
    

      

    注意:所以配置都是在module.exports = {} 对象内

    1 入口及出口文件配置

    (1)单文件配置

    entry:'./src/index.js',//入口
    output:{
      filename:'build.js',
      chunkFilename:'[name].chunk.js',//非html引入的js文件   path:path.resolve('./build') }//出口

      其中filename的属性值,build文件名可以任意名

      (2)引入多个js到同一个html文件中

    entry:['index.js',.....]
    

      entry为数组,即可引入多个js文件

      (3)定义多个入口文件及出口文件

    //定义多文件html时,需要使用对象
    entry:{
      index:'./src/index.js',
      a:'./src/a.js'
    },
    output:{
      filename:'[name].[hash:8].js',
      path:path.resolve('./build') 
    }
    

      entry需要为对象类型,属性名为文件名,属性值为目标文件路径

      output对象内,name为entry的属性名

      这里有需要注意的一个点,多个html文件可能会引入不同的js,所以有如下配置

    npm install html-webpack-plugin -D
    plugins:[
       new HtmlWebpackPlugin({
          filename:'a.html',//html文件名
          template:'./src/index.html'
          title:'哈哈',
          hash:true,
          minify:{
            removeAttributeQuotes:true,//去除属性的双引号
            collapseWhitespace:true//html代码全部在一行
          },
          chunks:['index']//多文件配置,需要引入的js文件
        },
        new HtmlWebpackPlugin({
          filename:'b.html'
          template:'./src/index.html'  
          title:'哈哈',
          hash:true,
          minify:{
            removeAttributeQuotes:true,//去除属性的双引号
            collapseWhitespace:true//html代码全部在一行
          },
          chunks:['a']//多文件配置
        }   
      )
    ]
    

      2 开发阶段使用的服务器配置

    webpack-dev-server -D
    devServer:{
      contentBase:'./build',//服务器开启时默认路径,生成的build是在内存中,若内存没有则找硬盘的文件
      port:3000,//端口号
      compress:true,//压缩服务器
      open:true,//自动打开浏览器
      hot:true//启动热更新
    },
    

      2.1 package.json配置快捷键

    “scripts”:{
        "build":"webpack",
        "start":"webpack-dev-server"
    }
    

      现在可使用 npm run dev 或者 npm run build 来开启服务器或者打包文件

      3 支持css等非js模块配置

    npm install style-loader css-loader -D
    module:{
      rules:[//读取是由右往左写
        {
          test:/.css$/,use:[
            {loader:'style-loader',options:''},
            {loader:'css-loader',
             options:{
             importLoaders:2 //作用:当css文件引用css文件时,可以再加载 postcss-loader等 
              modules:true  //作用:模块化,去除css耦合
             }
          
            }  //有热更新功能       ]     }   ] }

      缺点,所有样式都内联到html中,但是实际上是写入到js文件中。当css样式多时,会造成js文件过大

      所以采用,抽离样式,抽离到css文件,通过css文件引用。有两种插件,推荐使用第一种,如下:

    npm install extract-text-webpack-plugin@next -D  //稳定(建议使用)
    npm install mini-css-extract-plugin -D      //不太稳定
    

      (1)抽离为一个文件

    module: {
        rules: [{
             test: /.css$/,
             use: ExtractTextWebpackPlugin.extract({
                  use: [
                      { loader: 'css-loader' }
                  ]
             })
        }]
    },
    plugins: [
       new ExtractTextWebpackPlugin({
            filename: 'css/index.css'  //抽离出的文件名及路径
       })
    ]
    

      (2)抽离为两个文件

    const ExtractTextWebpackPlugin = require('extract-text-webpack-plugin')//抽离成css文件
    const cssExtract = new ExtractTextWebpackPlugin('css/index.css')
    const css1Extract = new ExtractTextWebpackPlugin('css/main.css')
    module: {
           rules: [{
               test: /.css$/,
               use: cssExtract.extract({
                   use: [
                       { loader: 'css-loader' }
                   ]
               })
           }]
     },
    plugins: [
            cssExtract,
            css1Extract
    ]
    

      缺点,抽离css文件,只是当发布时才使用。如果在开发中,则作用不大,所以使用下列代码段

      (3)禁用抽离,使用内联样式

    const ExtractTextWebpackPlugin = require('extract-text-webpack-plugin')//抽离成css文件
    const cssExtract = new ExtractTextWebpackPlugin({
       filename:'css/index.css',
       disable:true            
    })
    module: {
           rules: [{
               test: /.css$/,
               use: cssExtract.extract({
                   fallback:'style-loader'
                   use: [
                       { loader: 'css-loader' }
                   ]
               })
           }]
    }    

      3.1 引用css文件时,只调用用到的样式插件

    npm i purifycss-webpack purify-css glob -D
    
    const PurifycssWebpack = require('purifycss-webpack')
    const glob = require('glob')
    plugins:[
       new PurifycssWebpack({
           paths:glob.sync(path.resolve('src/*.html'))   
        })   
    ]
    

      注意:使用 new PurifycssWebpack() 时,需要在 HtmlWebpackPlugin() 后面

      3.2 自动在样式添加前缀

    npm i postcss-loader autoprefixer -D
    module: {
           rules: [{
               test: /.css$/,
               use: cssExtract.extract({
                   fallback:'style-loader'
                   use: [
                       { loader: 'css-loader' },
                       { loader:'postcss-loader'}
                   ]
               })
           }]
    }      
    

        创建 postcss.config.js

    module.exports = {
        plugins:[
            require('autoprefixer')
        ]
    }

      4 启动热更新配置

    plugins:[
      new Webpack.HotModuleReplacementPlugin(),//启动热更新,热更新:只更新一部分。
                        //如不配置,则更新全部,插件,vuex等全部更新并且丢失
    ]
    

      在js文件下

    if(module.hot){
        module.hot.accept();    //页面更新,则刷新
       module.hot.accept('./a.js',function(){
           /******/
       })  
    }

      5 每次运行清除build下的文件配置

    npm install clean-webpack-plugin -D
    plugins:[
        new CleanWebpackPlugin(),  //清除build文件夹下的文件
    ]   
    

      6 拷贝插件

      不打包不压缩,只启动复制的作用

    npm i copy-webpack-plugin -D
    plugins:[
        new CopyWebpackPlugin([{
              from:'./src/doc',
              to:'public'
        }]
    )]
    

     

     

     

      

     

  • 相关阅读:
    c编写程序完成m名旅客和n辆汽车的同步程序代写
    [原]web服务器:SOAP,WSDL,UDDI
    用多进程同步方法演示“桔子-苹果”问题
    实验教学管理系统 c语言程序代写源码下载
    模拟游客一天的生活与旅游java程序代写源码
    Java作业代写
    快餐店运行模拟C++程序源码代写
    求可能组合VB源码代写
    深入源码分析Java线程池的实现原理
    ThreadLocal原理详解
  • 原文地址:https://www.cnblogs.com/WernerWu/p/11361021.html
Copyright © 2020-2023  润新知