webpack3+React 的配置全解
webpack3 的配置相對于webpack2 又有了一些新的變化,這里講其記錄下來,備查 。
package.json 的完整文件在結(jié)尾 。
1. 安裝
npm init yarn add webpack webpack-dev-server -D
2. 配置簡單輸入輸出
webpack.config.js
module.exports = {
entry: {
ventor: ['react', 'react-dom'],
index: [
'babel-polyfill',
'react-hot-loader/patch',
path.resolve(__dirname, "src/index.js")
]
},
output: {
path: path.resolve(__dirname, "dist"),
filename: "js/[name].js",
},
devtool: 'source-map'
將所用到的庫單獨(dú)分離出來,在多頁面應(yīng)用中,對減少文件體積很有用 。
react-hot-loader 的3.0 版本的get start 剛剛更新 。 單獨(dú)打包了補(bǔ)丁,所以react-hot-loader 作為一個(gè)生產(chǎn)依賴安裝 。
這樣基本的輸入輸出就完成了 。
3. webpack-dev-server
devServer: {
hot: true, // 熱重載
inline: true, // 啟用inline 模式
port: 46480,
contentBase: path.resolve(__dirname, "dist"),
proxy: {
"/api": {
target: "xxxxx",
secure: false, // 處理https
changeOrigin: true, // 跨域
}
}
},
4. loaders
webpack 將所有的文件都當(dāng)做js文件處理,所以配置加載器
4.1 安裝loader
yarn add babel-loader less-loader postcss-loader css-loader style-loader -D yarn add react-hot-loader
4.2 配置loader
注意,loader 中的 name 都是相對于 output中的path 的 。
postcss-loader是對css 文件做一些預(yù)處理,常用就是添加css3屬性前綴,用到 autoprefixer 插件 。 配置postcss-loader ,需要 postcss.config.js 文件 。
babel-loader 需要配置option選項(xiàng),這里單獨(dú)提出去,放置到.babelrc 文件中 。
webpack.config.js
module: {
rules: [{
test: /.js$/,
use: [
"react-hot-loader/webpack",
"babel-loader",
],
exclude: path.resolve(__dirname, "node_modules")
},
{
test: /\.css$/,
use: [
"style-loader",
"css-loader",
"postcss-loader"
]
},
{
test: /\.less$/,
use: [
"style-loader",
"css-loader",
"postcss-loader",
"less-loader"
]
},
{
test: /\.(gif|png|jpe?g)$/,
use: [{
loader: "file-loader",
options: {
name: "static/img/[name].[ext]"
}
}]
},
{
test: /\.(ttf|eot|svg|woff)(\?(\w|#)*)?$/,
use: [{
loader: "file-loader",
options: {
name: "static/font/[name].[ext]"
}
}]
}
]
},
.babelrc
{
"presets": ["es2015", "stage-0", "react"],
"plugins": ["transform-decorators-legacy"]
}
transform-decorators-legacy 這個(gè)插件用來轉(zhuǎn)化es7 中的裝飾器,比如 autobind,connect 等 。
postcss.config.js
module.exports = {
plugins: [
require('autoprefixer')
]
}
5. 插件
插件是webpack 中非常重要的一部分 。
5.1 HtmlWebpackPlugin 插件 。
自動(dòng)生成html文件,并自動(dòng)引入script文件 。有幾個(gè)頁面就要new 幾個(gè)插件, 自動(dòng)引入同名的js文件。
const HtmlWebpackPlugin = require("html-webpack-plugin");
new HtmlWebpackPlugin({
template: path.resolve(__dirname, "src/index.html"),
name: "index",
title: "webpack config cli",
filename: "index.html",
inject: true,
}),
5.2 CommonsChunkPlugin 插件將單獨(dú)的部分作為chunk 提出去,減小文件體積,這里的name 要和 entry中對應(yīng) 。
new webpack.optimize.CommonsChunkPlugin({
name: 'vendor',
filename: 'js/vendor.js'
}),
5.3 webpack 模塊熱替換插件 HotModuleReplacementPlugin
new webpack.HotModuleReplacementPlugin()
5.4 ExtractTextPlugin 分離css 文件
在這個(gè)插件加載以前,css 文件是放在js文件中,在解釋js時(shí),將文本插入到style節(jié)點(diǎn)中 。
使用這個(gè)插件以后,就直接可以單獨(dú)分離css 文件 。
但是在開發(fā)環(huán)境中不要使用,會(huì)影響熱重載的速度。
ExtractTextPlugin 的插件配置相對復(fù)雜 。首先包裹loaders,注意這里已經(jīng)不能再使用style-loader了,因?yàn)樘崛ss的任務(wù)插件完成了 。當(dāng)提取失敗時(shí),使用style-loader 。
const ExtractTextPlugin = require("extract-text-webpack-plugin");
// loader部分
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [
"css-loader",
"postcss-loader"
]
})
},
{
test: /\.less$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: [
"css-loader",
"postcss-loader",
"less-loader"
]
})
}
// 插件部分
new ExtractTextPlugin({
filename: "css/index.css"
}),
6. 其他
extensions:用于省略后綴名
alias 處理別名 。
resolve: {
extensions: [" ", ".js", ".jsx", ".css", ".less"],
alias: {
components: path.resolve(__dirname, 'src/components/'),
css: path.resolve(__dirname, "src/css/"),
model: path.resolve(__dirname, 'src/model/'),
store: path.resolve(__dirname, 'src/store/')
}
}
7.package.json
{
"name": "webpack-react-cli",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server --open",
"build": "webpack -w"
},
"author": "",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^7.1.2",
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"babel-plugin-transform-decorators-legacy": "^1.3.4",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"css-loader": "^0.28.4",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^0.11.2",
"html-webpack-plugin": "^2.30.1",
"less": "^2.7.2",
"less-loader": "^4.0.5",
"postcss-loader": "^2.0.6",
"style-loader": "^0.18.2",
"webpack": "^3.0.0",
"webpack-dev-server": "^2.5.0"
},
"dependencies": {
"babel-polyfill": "^6.23.0",
"core-decorators": "^0.19.0",
"prop-types": "^15.5.10",
"react": "^15.6.1",
"react-dom": "^15.6.1",
"react-hot-loader": "^3.0.0-beta.7"
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- webpack常用配置項(xiàng)配置文件介紹
- 深入理解Webpack 中路徑的配置
- webpack教程之webpack.config.js配置文件
- vue-cli的webpack模板項(xiàng)目配置文件分析
- webpack引入eslint配置詳解
- webpack多入口文件頁面打包配置詳解
- Vue + Webpack + Vue-loader學(xué)習(xí)教程之相關(guān)配置篇
- 詳解vue2.0腳手架的webpack 配置文件分析
- 詳解vue-cli + webpack 多頁面實(shí)例配置優(yōu)化方法
- 詳解webpack之scss和postcss-loader的配置
- webpack配置sass模塊的加載的方法
- webpack構(gòu)建vue項(xiàng)目的詳細(xì)教程(配置篇)
- 5分鐘打造簡易高效的webpack常用配置
- webpack配置導(dǎo)致字體圖標(biāo)無法顯示的解決方法
- 淺談在vue中用webpack打包之后運(yùn)行文件的問題以及相關(guān)配置方法
- 詳解Webpack + ES6 最新環(huán)境搭建與配置
- webpack配置打包后圖片路徑出錯(cuò)的解決
- webpack高級(jí)配置與優(yōu)化詳解
相關(guān)文章
React注冊倒計(jì)時(shí)功能的實(shí)現(xiàn)
這篇文章主要介紹了React注冊倒計(jì)時(shí)功能的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09
React?Native?中處理?Android?手機(jī)吞字的解決方案
這篇文章主要介紹了React?Native?中處理?Android?手機(jī)吞字的解決方案,作者在 React Native 0.67.4 環(huán)境下,編寫了一個(gè)小 demo 來復(fù)現(xiàn)這個(gè)問題,需要的朋友可以參考下2022-08-08
解決React報(bào)錯(cuò)Property value does not exist&n
這篇文章主要為大家介紹了React報(bào)錯(cuò)Property value does not exist on type HTMLElement解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
react+antd 遞歸實(shí)現(xiàn)樹狀目錄操作
這篇文章主要介紹了react+antd 遞歸實(shí)現(xiàn)樹狀目錄操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

