file loader介紹:https://www.webpackjs.com/loaders/file-loader/
babel loader介紹:https://webpack.js.org/loaders/babel-loader/
webpack-dev-server介紹:https://www.webpackjs.com/configuration/dev-server/ ,https://www.jianshu.com/p/73d74445e5c5
今日在學習百度前端學院的一個小餐廳demo,學習用webpack打包遇到了一些問題
首先是根據這篇入門教學文章一步一步安裝https://segmentfault.com/a/1190000006178770#articleHeader6
1、報錯:TypeError: Cannot read property 'bindings' of null
原因:可能沒裝babel cli,看了網友寫的才發現,加上之后就好了

第二個是babel版本問題
教學文章有點舊,是這樣安裝的

而官方的說明是

在webpack 4.2以上使用
npm install -D babel-loader @babel/core @babel/preset-env

重新安裝后,再更改老的配置

原來是“env”而已,由網友提供的答案順利解決了問題。

webpack - babel配置
babel是一個javascript編譯器,是前端開發中的一個利器。它突破了瀏覽器實現es標准的限制,使我們在開發中可以使用最新的javascript語法。
通過構建和babel,可以使用最新js語法進行開發,最后自動編譯成用於瀏覽器或node環境的代碼。
webpack中使用babel
配合webpack使用babel前,需要首先使用npm init初始化一個項目,npm install -g webpack安裝webpack(全局安裝是為了在命令行使用webpack命令)。
- 安裝babel-loader, babel-core, babel-preset-env。
npm install --save-dev babel-loader babel-core babel-preset-env
其中,babel-preset-env插件是為了告訴babel只編譯批准的內容,相當於babel-preset-es2015, es2016, es2017及最新版本。通過它可以使用最新的js語法。
- 配置webpack.config.js
在webpack配置文件中配置bable-loader
module: module: { { rules: rules: [ [ { { test: test: /\.js$/, /\.js$/, use: use: { { loader: loader: 'babel-loader', 'babel-loader', options: { presets: [ ['env',{ targets: { browsers: ['> 1%', 'last 2 versions'] } }] ] } }, exclude: '/node_modules/' } ] }
其中,exclude是定義不希望babel處理的文件。targets是presets的一些預設選項,這里表示將js用於瀏覽器,只確保占比大於1%的瀏覽器的特性,主流瀏覽器的最新兩個主版本。
更多與配置有關的信息,可以參考:
babel env preset設置,
browserlist預設置.
- 在命令行中運行相應webpack命令即可。
- 由於babel-preset配置選項較多,我們一般可以在根目錄下建立.babelrc文件,專門用來放置babel preset配置,這是一個json文件。可以將上述配置修改如下:
//.bablerc文件 { "presets": [ ['env',{ "targets": { "browsers": ['> 1%', 'last 2 versions'] } }] ] }
//原webpack.config.js文件 module: { rules: [ { test: /\.js$/, use: { loader: 'babel-loader' }, exclude: '/node_modules/' } ] }
babel-polifill插件
在上面的babel配置中,babel只是將一些es6,es7-8的語法轉換成符合目標的js代碼,但是如果我們使用一些特性或方法,比如Generator, Set, 或者一些方法。babel並不能轉換為低版本瀏覽器識別的代碼。這時就需要babel-polifill。
簡單的說,polifill就是一個墊片,提供了一些低版本es標准對高級特性的實現。使用polifill的方法如下:
npm install --save babel-polifill
然后在應用入口引入polifill,要確保它在任何其他代碼/依賴聲明前被調用。
//CommonJS module require('babel-polyfill'); //es module import 'babel-polifill';
在webpack.config.js中,將babel-polifill加入entry數組中:
entry: ["babel-polifill", "./app.js"]
相比於runtime-transform,polifill用於應用開發中。會添加相應變量到全局,所以會污染全局變量。
更多細節參考babel-polifill。
runtime-transform插件
runtime transform也是一個插件,它與polifill有些類似,但它不污染全局變量,所以經常用於框架開發。
安裝:
npm install --save-dev babel-plugin-transform-runtime
npm install --save babel-runtime
用法:
將下面內容添加到.bablerc文件中
{ "plugins": ["transform-runtime"] }
更多細節參考bable-runtime-transform插件。
