webpack

===

webpack

什么是webpack

webpack 是一個(gè)現(xiàn)代 JavaScript 應(yīng)用程序的模塊打包器(module bundler),分析你的項(xiàng)目結(jié)構(gòu),找到JavaScript模塊以及其它的一些瀏覽器不能直接運(yùn)行的拓展語言(Sass,TypeScript等),并將其轉(zhuǎn)換和打包為合適的格式供瀏覽器使用。

為什么需要webpack

現(xiàn)在的前端,越來越復(fù)雜,特別是SPA(single page web application)流行之后,一個(gè)應(yīng)用程序往往會(huì)依賴很多其他的模塊,或者編譯scss、less、stylus等,如果僅僅是靠人來管理是不可能的,這個(gè)時(shí)候我們必須依賴于webpack來解決。

現(xiàn)在最流行的三個(gè)SPA的框架,都于webpack緊密相連。

  • React.js + webpack
  • Vue.js + webpack
  • Angular.js + webpack

學(xué)習(xí)webpack有4個(gè)重點(diǎn)內(nèi)容:

  • 入口(entry)
  • 輸出(output)
  • 加載器(loader)
  • 插件(plugins)

webpack安裝

注意:請(qǐng)先安裝node環(huán)境

npm install webpack@3.11.0 -g

建議大家這樣操作(隨時(shí)切換鏡像源):
1. npm install nrm -g // 安裝nrm
2. nrm ls // 查看鏡像源
3. nrm use taobao // 選擇淘寶鏡像,也可以選擇cnpm

使用webpack

01-webpack-cli

使用命令:webpack 輸入文件路徑 打包后文件路徑將一個(gè)文件打包成另外一個(gè)文件

02-webpack-config

  1. 配置webpack.config.js
  2. 運(yùn)行webpack
var path = require('path')

module.exports = {
  // 入口文件配置
  entry: "./src/app.js",

  // 出口文件配置項(xiàng)
  output: {
    // 輸出的路徑,webpack2起就規(guī)定必須是絕對(duì)路徑
    path: path.join(__dirname, 'dist'),
    // 輸出文件名字
    filename: "bundle.js"
  }
}

03-webpack-dev-server

默認(rèn)為--inline模式

  1. 運(yùn)行:npm init -y
  2. 運(yùn)行:npm i webpack-dev-server@2.9.7 webpack@3.11.0 -D
  var path = require('path')

  module.exports = {
    // 入口文件配置
    entry: "./src/app.js",

    // 輸出配置
    output: {
      // 輸出的路徑
      path: path.join(__dirname, 'dist'),
      // 靜態(tài)資源在服務(wù)器上運(yùn)行時(shí)的訪問路徑,可以直接http://localhost:8080/dist/bundle.js訪問到服務(wù)器中的bundle.js文件
      publicPath: '/dist',
      // 輸出文件名字
      filename: "bundle.js"
    }
  }
  1. index.html中修改 <script src="/dist/bundle.js"></script>

  2. 運(yùn)行:webpack-dev-server

  3. 運(yùn)行:webpack-dev-server --inline --hot --open --port 8090

  4. 配置script:"dev": "webpack-dev-server --inline --hot --open --port 8090"

  5. npm run dev

04-webpack-css

  1. 安裝npm install css-loader style-loader --save-dev
  module: {
    rules: [
      // 配置的是用來解析.css文件的loader(style-loader和css-loader)
      {
        // 1.0 用正則匹配當(dāng)前訪問的文件的后綴名是  .css
        test: /\.css$/,
        use: ['style-loader', 'css-loader'] //webpack底層調(diào)用這些包的順序是從右到左
      }
    ]
  }

05-webpack-less&webpack-sass

npm install less less-loader sass-loader node-sass --save-dev

{
    test: /\.less$/,
    use: [{
        loader: 'style-loader'
    }, {
        loader: 'css-loader'
    }, {
        loader: 'less-loader'
    }]
},
{
    test: /\.scss$/,
    use: [{
        loader: 'style-loader'
    }, {
        loader: 'css-loader'
    }, {
        loader: 'sass-loader'
    }]
}

06-webpack-圖片&字體

  1. npm install file-loader url-loader --save-dev

url-loader封裝了file-loader

{
    test: /\.(png|jpg|gif)/,
    use: [{
        loader: 'url-loader',
        options: {
          // limit表示如果圖片大于50000byte,就以路徑形式展示,小于的話就用base64格式展示
            limit: 50000
        }
    }]
}

07-webpack-html

  1. npm install html-webpack-plugin --save-dev

  2. 如果添加了title,需要在模板中添加<%= htmlWebpackPlugin.options.title %>

// 注意需要注釋掉publicPath,不然會(huì)沖突

var HtmlWebpackPlugin = require('html-webpack-plugin')

plugins: [
    new HtmlWebpackPlugin({
        filename: 'index.html',
        template: 'template.html'
    })
]

08-webpack-babel

  1. npm install babel-core babel-loader babel-preset-env --save-dev

注意:

webpack 1.x | babel-loader <= 6.x

webpack 2.x | babel-loader >= 7.x (推薦) (^6.2.10 也能用, 但是會(huì)出現(xiàn)不推薦使用的警告)

webpack 3.x | babel-loader >= 7.1

    {
      test: /\.js$/,
      // Webpack2建議盡量避免exclude,更傾向于使用include
      // exclude: /(node_modules)/, // node_modules下面的.js文件會(huì)被排除
      include: [path.resolve(__dirname, 'src')]
      use: {
        loader: 'babel-loader',
        // options里面的東西可以放到.babelrc文件中去
        options: {
          presets: ['env']
        }
      }
    }

// .babelrc文件內(nèi)的配置
{
  "presets":["env"]
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容