配置webpack4

webpack4基本配置

一、npm init     
  生成package.json文件
二、npm install webpack webpack-cil --save-dev
  安裝webpack和webpack-cli
三、新建一個src文件夾,裏面建立index.js文件

 

console.log(123);
  webpack會自動查找src下的index.js文件,將它打包到dist文件夾裏,默認生成main.js,main.js就是打包後的文件
四、修改package.json
1
2
3
4
5
"scripts" : {
     "test" "echo \"Error: no test specified\" && exit 1" ,
     "dev" "webpack --mode development" ,     // (開發模式)
     "build" "webpack --mode production"     // (生產模式)
  },

  開發模式生成的文件不壓縮javascript

  生產模式生成的文件壓縮css

五、運行npm run dev和npm run build
  此時,根目錄下就會多出dist文件夾,裏面有main.js文件,能夠分別運行這兩個命令,看一下生成的main.js文件的區別
六、以上這些都是默認的,固然這些能夠本身配置
  新建webpack.config.js文件
1
2
3
4
5
6
7
8
9
const path = require( "path" )
 
module.exports = {
     entry:  "./src/index.js" ,     // 入口
     output: {                    // 出口
         filename:  "bundle.js" ,       // 生成打包文件的名字
         path: path.join(__dirname,  "dist" )   // 打包文件的路徑,__dirname指當前根目錄
     }
}

  此時運行npm run dev,在dist文件夾下就能看到打包生成的bundle.js文件html

 

七、以上是單文件入口,那若是是多文件入口吶
  只需修改webpack.config.js文件

 

1
2
3
4
5
6
7
8
9
10
module.exports = {
     entry: {     // 多文件入口
         index:  "./src/index.js" ,
         test:  "./src/test.js"
     },
     output: {                    // 出口
         filename:  "[name].bundle.js" ,       // 生成打包文件的名字  ==>注意這裏,由於是多文件入口,全部須要[name]來區分文件
         path: path.join(__dirname,  "dist" )   // 打包文件的路徑,__dirname指當前根目錄
     }
}

  運行npm run devjava

  就能看到打包後的index.bundle.js和test.bundle.js文件,
  entry也能夠寫成數組的形式
    entry: ["./src/index.js", "./src/test.js"],
  這個方式和對象形式結果是同樣的。
  將代碼恢復,刪除掉剛剛生成的index.bundle.js和test.bundle.js文件,以及mian.js文件
八、設置webpack-dev-server
  安裝 npm install webpack-dev-server --save-dev
  在webpack.config.js進行配置
1
2
3
4
5
6
7
8
9
10
devServer: {
        // 設置基本目錄結構
        contentBase: path.join(__dirname,  "dist" ),
        // 服務器的ip地址,也可使用localhost
        host:  "localhost" ,
        // 服務端壓縮是否開啓
        compress:  true ,
        // 配置服務端口號
        port: 8080
    }

  修改package.json內容爲webpack

1
2
3
4
5
6
"scripts" : {
     "test" "echo \"Error: no test specified\" && exit 1" ,
     "serve" "webpack-dev-server --mode development" ,
     "dev" "webpack --mode development" ,
     "build" "webpack --mode production"
   },

  運行npm run serveweb

  成功
九、打包html文件
  安裝html-webpack-plugin,它可以幫咱們插入script及link標籤
  npm install html-webpack-plugin --save-dev
  src下新建index.html文件

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html lang= "en" >
<head>
     <meta charset= "UTF-8" >
     <meta name= "viewport"  content= "width=device-width, initial-scale=1.0" >
     <meta http-equiv= "X-UA-Compatible"  content= "ie=edge" >
     <title>Document</title>
</head>
<body>
     <div id= "main" >
         hello
     </div>
</body>
</html>

  在webpack.config.js中進行配置npm

  開頭引入插件json

1
const HtmlWebpackPlugin = require( 'html-webpack-plugin' )

  在plugins配置數組

 

1
2
3
4
5
6
7
8
plugins: [
         new  HtmlWebpackPlugin({
             filename:  'index.html' ,
             template:  './src/inde.html' ,
              // chunks: ['index'],  // 多入口時須要用到
             hash:  true       // 插入的文件後面加一段隨機數
         })
     ],

  運行npm run serve,瀏覽器中打開localhost:8080瀏覽器

  成功,此時dist文件夾下也有了index.html文件
十、打包css文件
  在src下新建main.css文件

 

1
2
3
4
5
6
7
#main{
         height: 100px;
         width: 100px;
         font-size: 40px;
         color:  #FF6347;
        
}

  須要安裝css-loader,style-loader

  npm install css-loader style-loader --save-dev
  webpack.config.js中配置

 

1
2
3
4
5
6
7
8
9
module: {
         rules:[
             // css loader
             {
                 test: /\.css$/,
                 use: [ "style-loader" "css-loader" ]    // 這裏順序不能顛倒
             }
         ]
     },

  

  在入口文件index.js中引入mian.css文件
  import main from './main.css'
  // require('./main.css')
  這兩種引入方式均可以
  npm run serve

  效果有了
十一、使用style-loader會將樣式內嵌到HTML中,可是咱們不但願這樣,咱們想在HTML中經過link標籤的形式引入。
  使用extract-text-webpack-plugin插件分離css
  安裝:
    npm install  extract-text-webpack-plugin --save-dev
  webpack.config.dev中配置
1
2
3
new  ExtractTextPlugin({
       filename:  "index.css" ,
})

  

1
2
3
4
5
6
7
8
9
10
11
rules:[
            // css loader
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback:  "style-loader"
                    use:  "css-loader"
                })
                  
            }
        ]

  

而後npm run build 打包,結果報錯

  這是由於extract-text-webpack-plugin目前版本並不支持webpack4
  因此安裝最新版本
    npm install  extract-text-webpack-plugin@next --save-dev
  再次打包
  npm run build,成功,此時dist文件夾裏就有了index.css文件

 

   

  此時dist下的html文件中就是經過link的方式引入css的

  若是在css中引入圖片打包吶
十二、css中引入圖片
  在src/index.html新加一個div,class爲bg。在src/main.css中添加

 

1
2
3
4
5
.bg{
         height: 50px;
         width: 50px;
         background: url( "./img/confirm.png" )
  }

  

  npm run build 打包

  報錯
  這是由於缺乏loader,安裝file-loader和url-loader
  npm install file-loader url-loader --save-dev
  配置:
1
2
3
4
5
6
7
8
9
10
// 圖片 loader
            {
                test: /\.(png|jpg|gif|jpeg)/,
                use: [{
                    loader:  'url-loader' ,
                    options: {
                        limit: 500    //是把小於500B的文件打成Base64的格式,寫入JS
                    }
                }]
            }

  

  npm run build 打包 ,成功
  npm run serve 看下

 

  有了
  這裏配置的時候只引用了url-loader,這是由於,url-loader封裝了file-loader
  url-loader工做分兩種狀況:
    1.文件大小小於limit參數,url-loader將會把文件轉爲DataURL(Base64格式);
    2.文件大小大於limit,url-loader會調用file-loader進行處理,參數也會直接傳給file-loader。
 
  也就是說,其實咱們只安裝一個url-loader就能夠了。可是爲了之後的操做方便,因此順便安裝上file-loader。
1三、html中經過img引入圖片
  這時候css中引入圖片沒問題,可是在HTML文件中經過img引入圖片,會有問題,打包雖然沒有報錯,可是頁面上並無顯示圖片,控制檯能看到報錯

  這是由於打包後路徑的問題。
  使用html-withimg-loader來處理html引入的img圖片
  安裝:
    npm install html-withimg-loader --save-dev
  配置
    url-loader中添加

 

1
2
3
4
options: {
            limit: 500,    //是把小於500B的文件打成Base64的格式,寫入JS
            outputPath:  'images/'   //打包後的圖片放到images文件夾下
         }

  

在module中添加

 

1
2
3
4
{
             test: /\.(htm|html)$/i,
             use: [ "html-withimg-loader" ]
         }

 

  而後npm run build,成功,可是dist文件夾中並無生成images文件夾,這是由於設置了limit,若是引用的圖片小於500k,url-loader將圖片轉換成base64格式寫入js,引入一張大的試試,再打包

 

  能夠看到區別,1.jpg因爲超過400k,因此就被打包到了dist/images中了
 
1四、使用less
  安裝less:
    npm install less --save-dev
  打包須要less-loader,再安裝less-loader:
    npm install less-loader --save-dev
  配置:

 

1
2
3
4
5
// less loader
        {
            test: /\.less$/,
            use: [ "style-loader" "css-loader" "less-loader" ]
        }

  

  在src文件夾下建立indexless.less文件

 

1
2
3
4
5
6
@bgColor:  #FFA54F;
.my{
         height: 100px;
         width: 100px;
        
  }

    

  對應的在index.html中添加class爲my的div塊
  npm run serve,瀏覽器中就能看到了

1五、分離出來less文件,像分離css文件同樣
  其實和分離css文件配置基本是同樣的

 

1
2
3
4
5
6
7
8
9
10
// less loader
            {
                test: /\.less$/,
                
                use: ExtractTextPlugin.extract({
                    fallback:  "style-loader" ,
                    use: [ "css-loader" "less-loader" ]
                }),
                
            }

  

  這時候運行npm run build 打包
  看dist文件夾下生成的index.css文件

  已經生成
1六、使用sass,配置大體相同
 
1七、自動添加CSS3屬性前綴
  安裝插件:
    npm install postcss-loader autoprefixer --save-dev
  在根目錄下建立postcss.config.js文件
1
2
3
4
5
module.exports = {
         plugins: [
             require( 'autoprefixer' )   //自動添加前綴插件
         ]
}

  

webpack.config.js配置

 

1
2
3
4
5
6
7
8
9
// css loader
        {
             test: /\.css$/,
             use: ExtractTextPlugin.extract({
                  fallback:  "style-loader"
                  use: [ "css-loader" "postcss-loader" ]
              })
                   
         },

  

npm run build打包
看下對比

相關文章
相關標籤/搜索