Babel實際上是一個編譯JavaScript的平臺,它的強大之處表如今能夠經過便宜幫你達到如下目的:
使用下一代的javaScript代碼(ES6,ES7….),即便這些標準目前並未被當前的瀏覽器徹底支持。
使用基於JavaScript進行了擴展的語言,好比React的JSX。
cnpm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
{
test:/\.(jsx|js)$/,
use:{
loader:'babel-loader',
options:{
presets:[
"es2015","react"
]
}
},
//排除目錄
exclude:/node_modules/
}
雖然Babel能夠直接在webpack.config.js中進行配置,可是考慮到babel具備很是多的配置選項,若是卸載webapck.config.js中會很是的雍長不可閱讀,
因此咱們常常把配置卸載.babelrc文件裏。
在項目根目錄新建.babelrc文件,並把配置寫到文件裏
{
"presets":["react","es2015"]
}
如今網絡上已經不流行babel-preset-es2015,如今官方推薦使用的是babel-preset-env,那咱們爲了緊跟潮流,咱們在講一下env的配置方法。
首先下載安裝包
npm install --save-dev babel-preset-env
而後修改.babelrc裏的配置文件。其實只要把以前的es2015換成env就能夠了。
{
"presets":["react","env"]
}
// node中的引入路徑模塊
const path = require('path');
// 檢查html模板,因此咱們須要引入node的glob對象使用 配合purifycss-webpack使用 查找
const glob = require('glob');
// 引入webpack
const webpack = require('webpack');
// 打包html
const htmlPlugin = require('html-webpack-plugin');
// 壓縮js
const uglify = require('uglifyjs-webpack-plugin');
// 從js中分離css插件
const extractTextPlugin = require("extract-text-webpack-plugin");
// 消除無用的css 好比你寫一個#demo 若是頁面沒有這個id 則會被消除
const PurifyCSSPlugin = require("purifycss-webpack");
// 爲處理路徑 設置一個 絕對路徑
var website = {
publicPath: "http://192.168.1.101:9080/"
}
module.exports = {
//入口文件的配置項
entry: {
entry: './src/js/entry.js'
},
//出口文件的配置項
output: {
//輸出的路徑,用了Node語法
path: path.resolve(__dirname, 'dist'),
//輸出的目錄以及文件名稱
filename: 'js/bundle.js',
// 處理分離後css路徑對不上問題
publicPath: website.publicPath
},
//模塊:例如解讀CSS,圖片如何轉換,壓縮
module: {
rules: [
{
// 用於匹配處理文件的擴展名的表達式,這個選項是必須進行配置的;
test: /\.css$/,
// 引用分離css的plugin
use: extractTextPlugin.extract({
fallback: 'style-loader',
use: [{
loader: 'css-loader',
options: {
importLoaders: 1
}
},
// 給css加前綴
'postcss-loader'
]
})
},
{
test: /\.(png|jpg|gif)/,
// 指定使用的loader和loader的配置參數
use: [{
loader: 'url-loader',
options: {
// 把小於500000B(488kb)的文件打成Base64的格式,寫入JS 小於則幫你複製圖片過去並引入
// limit:500000
// 如今是以圖片形式引入
limit: 50,
// 指定圖片輸出的目錄
outputPath: 'images/'
}
}]
},
{
test:/\.(jsx|js)$/,
use:{
loader:'babel-loader',
},
// 排除目錄選項
exclude:/node_modules/
}
]
},
//插件,用於生產模版和各項功能
plugins: [
// new uglify(),
new htmlPlugin({
// 是對html文件進行壓縮,removeAttrubuteQuotes是卻掉屬性的雙引號
minify: {
removeAttributeQuotes: true
},
// 爲了開發中js有緩存效果,因此加入hash,這樣能夠有效避免緩存JS
hash: true,
// 是要打包的html模版路徑和文件名稱
template: './src/index.html'
}),
// 從js中分離css /css/index.css是設置分離後的路徑 除此以外還要修改css-loader的寫法
// 分離出來後圖片路徑不對 用publicPath解決 在output中設置
new extractTextPlugin("css/index.css"),
// 消除無用的css
new PurifyCSSPlugin({
// 路徑掃描
paths: glob.sync(path.join(__dirname, 'src/*.html')),
})
],
//配置webpack開發服務功能
devServer: {
//設置基本目錄結構
contentBase: path.resolve(__dirname, 'dist'),
//服務器的IP地址,可使用IP也可使用localhost
host: '192.168.1.101',
//服務端壓縮是否開啓
compress: true,
//配置服務端口號
port: 9080
}
}
{
"name": "xz",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"start": "webpack-dev-server"
},
"author": "",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^7.1.6",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-env": "^1.6.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"css-loader": "^0.28.7",
"extract-text-webpack-plugin": "^3.0.1",
"file-loader": "^1.1.5",
"html-webpack-plugin": "^2.30.1",
"postcss-loader": "^2.0.8",
"purify-css": "^1.2.5",
"purifycss-webpack": "^0.7.0",
"style-loader": "^0.19.0",
"url-loader": "^0.6.2",
"webpack": "^3.8.1",
"webpack-dev-server": "^2.9.3"
}
}
npm start 開發環境 webpack 生產環境