1. 程式人生 > >webpack打包流程進階

webpack打包流程進階

nod -o 文件的 跳轉 影響 line nbsp bpa str

1.生成Source Maps(使調試更容易)

source-map

在一個單獨的文件中產生一個完整且功能完全的文件。這個文件具有最好的source map,但是它會減慢打包速度。

cheap-module-source-map

在一個單獨的文件中生成一個不帶列映射的map,不帶列映射提高了打包速度,但是也使得瀏覽器開發者工具只能對應到具體的行,不能對應到具體的列(符號),會對調試造成不便。

eval-source-map

使用eval打包源文件模塊,在同一個文件中生成幹凈的完整的source map。這個選項可以在不影響構建速度的前提下生成完整的sourcemap,但是對打包後輸出的Js文件的執行具有性能和安全的隱患。在開發階段這是一個非常好的選項,在生產階段一定不要啟用這個選項。

cheap-module-eval-source-map

這是在打包文件時最快的生成source map的方法,生成的Source Map會和打包後的javascript文件同行顯示,沒有列映射,和eval-source-map選項具有相似的缺點。

eval-source-map是一個很好的選項,再次強調你只應該開發階段使用它

webpack.config.js配置如下:

module.exports={
        
          devtool:‘eval-source-map‘,
          entry:__dirname+"/app/main/js",
          output:{
                path:__dirname
+"/public", filename:"bundle.js" } }

2.使用webpack構建本地服務器

它是一個單獨的組件,在webpack中進行配置之前需要單獨安裝它作為項目依賴

npm install --save-dev webpack-dev-server

devserver的配置選項功能描述
contentBase 默認webpack-dev-server會為根文件夾提供本地服務器,如果想為另外一個目錄下的文件提供本地服務器,應該在這裏設置其所在目錄(本例設置到“public"目錄)
port 設置默認監聽端口,如果省略,默認為”8080“
inline 設置為true,當源文件改變時會自動刷新頁面
historyApiFallback 在開發單頁應用時非常有用,它依賴於HTML5 history API,如果設置為true,所有的跳轉將指向index.html

module.exports = {
  devtool: ‘eval-source-map‘,

  entry:  __dirname + "/app/main.js",
  output: {
    path: __dirname + "/public",
    filename: "bundle.js"
  },

  devServer: {
    contentBase: "./public",//本地服務器所加載的頁面所在的目錄
    historyApiFallback: true,//不跳轉
    inline: true//實時刷新
  } 
}

package.json中的scripts對象中添加如下命令,用以開啟本地服務器:

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack",
    "server": "webpack-dev-server --open"
  },

運行npm run server

3.Loaders

3.1 安裝Babel

// npm一次性安裝多個依賴模塊,模塊之間用空格隔開
npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
module.exports = {
    entry: __dirname + "/app/main.js",//已多次提及的唯一入口文件
    output: {
        path: __dirname + "/public",//打包後的文件存放的地方
        filename: "bundle.js"//打包後輸出文件的文件名
    },
    devtool: ‘eval-source-map‘,
    devServer: {
        contentBase: "./public",//本地服務器所加載的頁面所在的目錄
        historyApiFallback: true,//不跳轉
        inline: true//實時刷新
    },
    module: {
        rules: [
            {
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: [
                            "es2015", "react"
                        ]
                    }
                },
                exclude: /node_modules/
            }
        ]
    }
};

  • test:一個用以匹配loaders所處理文件的拓展名的正則表達式(必須)
  • loader:loader的名稱(必須)
  • include/exclude:手動添加必須處理的文件(文件夾)或屏蔽不需要處理的文件(文件夾)(可選);
  • query:為loaders提供額外的設置選項(可選)

webpack打包流程進階