day05-vuejs-webpack(3.4.1)(一)

nrm的安裝和使用:

作用:提供了一些最常用的NPM包鏡像地址,能夠讓我們快速的切換安裝包時候的服務器地址;
什么是鏡像:原來包剛一開始是只存在于國外的NPM服務器,但是由于網絡原因,經常訪問不到,這時候,我們可以在國內,創建一個和官網完全一樣的NPM服務器,只不過,數據都是從人家那里拿過來的,除此之外,使用方式完全一樣;

  1. 運行npm i nrm -g全局安裝nrm包;
  2. 使用nrm ls查看當前所有可用的鏡像源地址以及當前所使用的鏡像源地址;
  3. 使用nrm use npmnrm use taobao切換不同的鏡像源地址;

注意: nrm 只是單純的提供了幾個常用的 下載包的 URL地址,并能夠讓我們在 這幾個 地址之間,很方便的進行切換,但是,我們每次裝包的時候,使用的 裝包工具,都是 npm


什么是webpack?
webpack 是前端的一個項目構建工具,它是基于 Node.js 開發出來的一個前端工具;

如何完美實現上述的2種解決方案

  1. 使用Gulp, 是基于 task 任務的;

  2. 使用Webpack, 是基于整個項目進行構建的;

  • 借助于webpack這個前端自動化構建工具,可以完美實現資源的合并、打包、壓縮、混淆等諸多功能。

  • 根據官網的圖片介紹webpack打包的過程

  • webpack官網

webpack安裝的兩種方式
  1. 運行npm i webpack -g全局安裝webpack,這樣就能在全局使用webpack的命令
  2. 在項目根目錄中運行npm i webpack --save-dev安裝到項目依賴中

初步使用webpack打包構建列表隔行變色案例

  1. 運行npm init初始化項目,使用npm管理項目中的依賴包
  2. 創建項目基本的目錄結構
  3. 使用cnpm i jquery --save安裝jquery類庫
  4. 創建main.js并書寫各行變色的代碼邏輯:
    // 導入jquery類庫
    import $ from 'jquery'

    // 設置偶數行背景色,索引從0開始,0是偶數
    $('#list li:even').css('backgroundColor','lightblue');
    // 設置奇數行背景色
    $('#list li:odd').css('backgroundColor','pink');
  1. 直接在頁面上引用main.js會報錯,因為瀏覽器不認識import這種高級的JS語法,需要使用webpack進行處理,webpack默認會把這種高級的語法轉換為低級的瀏覽器能識別的語法;
  2. 運行webpack 入口文件路徑 輸出文件路徑main.js進行處理:
webpack src/js/main.js dist/bundle.js
作用:
  1. webpack 能夠處理 JS 文件的互相依賴關系;
  2. webpack 能夠處理JS的兼容問題,把 高級的、瀏覽器不是別的語法,轉為 低級的,瀏覽器能正常識別的語法
格式:

webpack 要打包的文件的路徑 打包好的輸出文件的路徑。

使用webpack的配置文件簡化打包時候的命令:
  1. 在項目根目錄中創建webpack.config.js
  2. 由于運行webpack命令的時候,webpack需要指定入口文件和輸出文件的路徑,所以,我們需要在webpack.config.js中配置這兩個路徑:
// 導入處理路徑的模塊
    var path = require('path');

    // 導出一個配置對象,將來webpack在啟動的時候,會默認來查找webpack.config.js,并讀取這個文件中導出的配置對象,來進行打包處理
    module.exports = {
        entry: path.resolve(__dirname, 'src/js/main.js'), // 項目入口文件
        output: { // 配置輸出選項
            path: path.resolve(__dirname, 'dist'), // 配置輸出的路徑
            filename: 'bundle.js' // 配置輸出的文件名
        }
    }

當我們在 控制臺,直接輸入 webpack 命令執行的時候,webpack 做了以下幾步:

  1. 首先,webpack 發現,我們并沒有通過命令的形式,給它指定入口和出口
  2. webpack 就會去 項目的 根目錄中,查找一個叫做 webpack.config.js 的配置文件
  3. 當找到配置文件后,webpack 會去解析執行這個 配置文件,當解析執行完配置文件后,就得到了 配置文件中,導出的配置對象
  4. 當 webpack 拿到 配置對象后,就拿到了 配置對象中,指定的 入口 和 出口,然后進行打包構建;
webpack-dev-server(2.9.3)的基本使用:
  1. 由于每次重新修改代碼之后,都需要手動運行webpack打包的命令,比較麻煩,所以使用webpack-dev-server來實現代碼實時打包編譯,當修改代碼之后,會自動進行打包構建。
  2. 運行cnpm i webpack-dev-server --save-dev安裝到開發依賴
  3. 安裝完成之后,在命令行直接運行webpack-dev-server來進行打包,發現報錯,此時需要借助于package.json文件中的指令,來進行運行webpack-dev-server命令,在scripts節點下新增"dev": "webpack-dev-server"指令,發現可以進行實時打包,但是dist目錄下并沒有生成bundle.js文件,這是因為webpack-dev-server將打包好的文件放在了內存中
  • bundle.js放在內存中的好處是:由于需要實時打包編譯,所以放在內存中速度會非???/li>
  • 這個時候訪問webpack-dev-server啟動的http://localhost:8080/網站,發現是一個文件夾的面板,需要點擊到src目錄下,才能打開我們的index首頁,此時引用不到bundle.js文件,需要修改index.html中script的src屬性為:<script src="../bundle.js"></script>
  • 為了能在訪問http://localhost:8080/的時候直接訪問到index首頁,可以使用--contentBase src指令來修改dev指令,指定啟動的根目錄:
 "dev": "webpack-dev-server --contentBase src"

同時修改index頁面中script的src屬性為`<script src="bundle.js"></script>


image.png
webpack-dev-server的常用命令參數(在package.json中配置):
image.png
  1. 由于每次重新修改代碼之后,都需要手動運行webpack打包的命令,比較麻煩,所以使用webpack-dev-server來實現代碼實時打包編譯,當修改代碼之后,會自動進行打包構建。
  2. 運行cnpm i webpack-dev-server --save-dev安裝到開發依賴
  3. 安裝完成之后,在命令行直接運行webpack-dev-server來進行打包,發現報錯,此時需要借助于package.json文件中的指令,來進行運行webpack-dev-server命令,在scripts節點下新增"dev": "webpack-dev-server"指令,發現可以進行實時打包,但是dist目錄下并沒有生成bundle.js文件,這是因為webpack-dev-server將打包好的文件放在了內存中
  • bundle.js放在內存中的好處是:由于需要實時打包編譯,所以放在內存中速度會非常快
  • 這個時候訪問webpack-dev-server啟動的http://localhost:8080/網站,發現是一個文件夾的面板,需要點擊到src目錄下,才能打開我們的index首頁,此時引用不到bundle.js文件,需要修改index.html中script的src屬性為:<script src="../bundle.js"></script>
  • 為了能在訪問http://localhost:8080/的時候直接訪問到index首頁,可以使用--contentBase src指令來修改dev指令,指定啟動的根目錄:
 "dev": "webpack-dev-server --contentBase src"

同時修改index頁面中script的src屬性為<script src="bundle.js"></script>

webpack-dev-server配置命令的第2種方式(在webpack.config中配置):
  1. 修改webpack.config.js文件,新增devServer節點如下:
devServer:{
        hot:true,
        open:true,
        port:4321
    }
  1. 在頭部引入webpack模塊:
var webpack = require('webpack');
  1. plugins節點下新增:
new webpack.HotModuleReplacementPlugin()
html-webpack-plugin的兩個基本作用:
這個插件的兩個作用:
  1. 自動在內存中根據指定頁面生成一個內存的頁面
  2. 自動,把打包好的 bundle.js 追加到頁面中去

  1. 運行cnpm i html-webpack-plugin --save-dev安裝到開發依賴
  2. 修改webpack.config.js配置文件如下:
    // 導入處理路徑的模塊
    var path = require('path');
    // 導入自動生成HTMl文件的插件
    var htmlWebpackPlugin = require('html-webpack-plugin');

    module.exports = {
        entry: path.resolve(__dirname, 'src/js/main.js'), // 項目入口文件
        output: { // 配置輸出選項
            path: path.resolve(__dirname, 'dist'), // 配置輸出的路徑
            filename: 'bundle.js' // 配置輸出的文件名
        },
        plugins:[ // 添加plugins節點配置插件
            new htmlWebpackPlugin({
                template:path.resolve(__dirname, 'src/index.html'),//模板路徑
                filename:'index.html'//自動生成的HTML文件的名稱
            })
        ]
    }
  1. 修改package.jsonscript節點中的dev指令如下:
"dev": "webpack-dev-server"
  1. 將index.html中script標簽注釋掉,因為html-webpack-plugin插件會自動把bundle.js注入到index.html頁面中!
loader-配置處理css樣式表的第三方loader:

注意: webpack, 默認只能打包處理 JS 類型的文件,無法處理 其它的非 JS 類型的文件;
如果要處理 非JS類型的文件,我們需要手動安裝一些 合適 第三方 loader 加載器;

  1. 如果想要打包處理 css 文件,需要安裝 npm i style-loader css-loader -D
  2. 打開 webpack.config.js 這個配置文件,在 里面,新增一個 配置節點,叫做 module, 它是一個對象;在 這個 module 對象身上,有個 rules 屬性,這個 rules 屬性是個 數組;這個數組中,存放了,所有第三方文件的 匹配和 處理規則;
打包css文件:
  1. 運行cnpm i style-loader css-loader --save-dev
  2. 修改webpack.config.js這個配置文件:
module: { // 用來配置第三方loader模塊的
        rules: [ // 文件的匹配規則
            { test: /\.css$/, use: ['style-loader', 'css-loader'] }//處理css文件的規則
        ]
    }

. 注意:use表示使用哪些模塊來處理test所匹配到的文件;use中相關loader模塊的調用順序是從后向前調用的;

處理的過程:

注意: webpack 處理第三方文件類型的過程:

  1. 發現這個 要處理的文件不是JS文件,然后就去 配置文件中,查找有沒有對應的第三方 loader 規則
  2. 如果能找到對應的規則, 就會調用 對應的 loader 處理 這種文件類型;
  3. 在調用loader 的時候,是從后往前調用的;
  4. 當最后的一個 loader 調用完畢,會把 處理的結果,直接交給 webpack 進行 打包合并,最終輸出到 bundle.js 中去

使用webpack打包less文件

  1. 運行cnpm i less-loader less -D
  2. 修改webpack.config.js這個配置文件:
{ test: /\.less$/, use: ['style-loader', 'css-loader', 'less-loader'] },

使用webpack打包sass文件

  1. 運行cnpm i sass-loader node-sass --save-dev
  2. webpack.config.js中添加處理sass文件的loader模塊:
{ test: /\.scss$/, use: ['style-loader', 'css-loader', 'sass-loader'] }

使用webpack處理css中的路徑:

  1. 運行cnpm i url-loader file-loader --save-dev
  2. webpack.config.js中添加處理url路徑的loader模塊:
{ test: /\.(png|jpg|gif)$/, use: 'url-loader' }
  1. 可以通過limit指定進行base64編碼的圖片大??;只有小于指定字節(byte)的圖片才會進行base64編碼:
{ test: /\.(png|jpg|gif)$/, use: 'url-loader?limit=43960' },

使用babel處理高級JS語法:

  1. 運行cnpm i babel-core babel-loader babel-plugin-transform-runtime --save-dev安裝babel的相關loader包
  2. 運行cnpm i babel-preset-es2015 babel-preset-stage-0 --save-dev安裝babel轉換的語法
  3. webpack.config.js中添加相關loader模塊,其中需要注意的是,一定要把node_modules文件夾添加到排除項:
{ test: /\.js$/, use: 'babel-loader', exclude: /node_modules/ }
  1. 在項目根目錄中添加.babelrc文件,并修改這個配置文件如下:
{
    "presets":["es2015", "stage-0"],
    "plugins":["transform-runtime"]
}
  1. 注意:語法插件babel-preset-es2015可以更新為babel-preset-env,它包含了所有的ES相關的語法;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容