webpack 配置react腳手架 配置檔案
出於省事的目的,不用自己去記。 搬運來,算是記個筆記
英文地址,猛擊http://www.pro-react.com/materials/appendixA/
中文地址,猛擊http://www.jianshu.com/p/42e11515c10f
PS.在配置loaders的loader關鍵字時加上後面的“-loader”字尾。新版做的規定,網上之前的文章並沒有提及,算是個坑。webpack配置是做簡單的配置,根據需要可以自己修改。
資料夾基本結構
安裝 webpack
確保 系統中已安裝node.js 通過npm安裝 webpack,新建檔案(例如 reactapp)cd命令進入該資料夾
//全域性安裝
npm install -g webpack
//安裝到你的專案目錄
npm install --save-dev webpack
初始化 生成package.json檔案
終端中使用npm init命令可以自動建立
npm init
輸入這個命令後,終端會提示填寫名稱,描述,作者等資訊,回車預設即可。
package.json檔案最終版本如下
var path = require('path');
var webpack = require('webpack'); //載入webpack依賴包
var HtmlWebpackPlugin = require('html-webpack-plugin');
var ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
devtool: 'eval-source-map',
entry: __dirname + "/app/main.js",
output: {
path: __dirname + "/build",
//輸出檔案
filename: "[name]-[hash].js"
},
devServer: {
contentBase: "./build",//本地伺服器所載入的頁面所在的目錄
colors: true,//終端中輸出結果為彩色
historyApiFallback: true,//不跳轉
inline: true,//實時重新整理
hot: true
} ,
module: {
loaders: [
{
test: /\.js?$/,
exclude: /node_modules/,
loader: 'babel-loader',
},
{ test: /\.json$/,loader: "json-loader" },
{ test: /\.css$/, loader: 'style-loader!css-loader' }, //分離js 和css檔案 ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader' })//
//打包css檔案
{ test: /\.scss$/, loader: 'style-loader!css-loader!sass-loader'}, //分離js 和css檔案 ExtractTextPlugin.extract({ fallback: 'style-loader', use: 'css-loader!sass-loader' })//
//編譯sass檔案
{ test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}
//對圖片進行打包
]
},
postcss: [
require('autoprefixer')//呼叫autoprefixer外掛 ],
resolve: {
//自動擴充套件檔案字尾名
extensions: ['.js', '.json', '.scss', '.css','.jsx']
} ,
plugins: [
new HtmlWebpackPlugin({
template: __dirname + "/app/index.html"
}),
new webpack.HotModuleReplacementPlugin(),
new ExtractTextPlugin("[name]-[hash].css"),
new webpack.optimize.UglifyJsPlugin(),
new ExtractTextPlugin("style.css")
]
};
.babelrc檔案
{
"presets": ["react", "es2015"],
"env": {
"development": {
"plugins": [["react-transform", {
"transforms": [{
"transform": "react-transform-hmr",
"imports": ["react"],
"locals": ["module"]
}]
} ] ]
} } }
安裝babel
//安裝
npm install --save-dev babel-core babel-loader babel-preset-es2015 babel-preset-react
外掛部分
安裝postcss-loader 和 autoprefixer(自動新增字首的外掛)
//安裝
npm install --save-dev postcss-loader autoprefixer
安裝css-loader 和 style-loader
//安裝
npm install --save-dev style-loader css-loader
Hot Module Replacement(HMR)是webpack裡很有用的一個外掛,修改元件程式碼後,自動重新整理實時預覽修改後的效果
安裝react-transform-hmr 修改babel檔案
//安裝
npm install --save-dev babel-plugin-react-transform react-transform-hmr
HtmlWebpackPlugin
作用是依據一個簡單的模板,生成最終的Html5檔案,檔案中自動引用打包後的JS檔案。每次編譯在檔名中插入不同的雜湊值
//安裝
npm install --save-dev html-webpack-plugin
優化外掛
OccurenceOrder 和 UglifyJS plugins 都是內建外掛
npm install --save-dev extract-text-webpack-plugin
eslint babel-eslint eslint-plugin-react eslint-plugin-babel 糾錯工具
中介軟體伺服器指令碼
var path = require('path');
var express = require('express');
var webpack = require('webpack');
var config = require('./webpack.config');
var app = express();
var compiler = webpack(config);
var webpackDevOptions = {
noInfo: true,
historyApiFallback: true,
publicPath: config.output.publicPath,
headers: {
'Access-Control-Allow-Origin': '*'
}
};
app.use(require('webpack-dev-middleware')(compiler, webpackDevOptions));
app.use(require('webpack-hot-middleware')(compiler));
app.get('/', function(req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.listen(8080, 'localhost', function(err) {
if (err) {
console.log(err);
return;
}
console.log('Listening at http://localhost:8080');
});
使用 ESLint
npm install --save-dev babel-eslint eslint eslint-plugin-react
配置 .eslintrc檔案
{
"extends": "eslint:recommended", //可選"eslint-config-airbnb"
"ecmaFeatures": {
"jsx": true,
"modules": true
},
"env": {
"browser": true,
"node": true,
"es6": true
},
"parser": "babel-eslint",
"rules": {
"strict": 0,
"valid-jsdoc": 2,
"react/jsx-uses-react": 2,
"react/jsx-uses-vars": 2,
"react/react-in-jsx-scope": 2
},
"plugins": [
"react"
]
}
var merge = require('webpack-merge')
var webpack = require('webpack')
var baseWebpackConfig = require('./webpack.config');
module.exports = merge(baseWebpackConfig, {
devtool: 'source-map',
plugins: [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: JSON.stringify('development')
}
}),
]
})
相關文章
- webpack4配置vue腳手架WebVue
- vue-cli腳手架中webpack配置基礎檔案詳解VueWeb
- 快速配置 webpack 多入口腳手架Web
- vue 腳手架 配置 及檔案介紹Vue
- webpack4多頁面打包腳手架配置Web
- vue 腳手架 配置 及檔案介紹 2.0 版本Vue
- webpack+react+antd腳手架優化WebReact優化
- Dva手腳架搭建React專案React
- 從React腳手架工具學習React專案的最佳實踐(上):前端基礎配置React前端
- 不借助腳手架手動搭建react專案(webpack5 + Antd4 + React18)ReactWeb
- 從搭建vue-腳手架到掌握webpack配置(一.基礎配置)VueWeb
- React入門---react腳手架React
- webpack配置Plugin/配置檔案分離WebPlugin
- vue基本指令與腳手架基本配置Vue
- 基於webpack4.X從零搭建React腳手架WebReact
- spring cloud腳手架專案(十一)logback配置SpringCloud
- 搭建webpack簡易腳手架Web
- react webpack 2.0 配置ReactWeb
- Vue踩坑記錄(二)——vue腳手架webpack配置一個小問題VueWeb
- 用webpack4從零開始構建react腳手架WebReact
- 七天接手react專案 系列 —— react 腳手架建立專案React
- React結合webpack配置ReactWeb
- 服務端渲染的React手腳架。完美使用 React, Redux, and React-Router!最好用的腳手架服務端ReactRedux
- 一個簡單易用的webpack4多頁面腳手架配置加學習Web
- Vue+webpack搭建自己的腳手架VueWeb
- 開箱即用的 Vue Webpack 腳手架模版VueWeb
- react+typescript+antd腳手架搭建ReactTypeScript
- 基於React的腳手架搭建React
- React(腳手架)——create-react-app擼api(三)ReactAPPAPI
- webpack(11)配置檔案分離為開發配置、生成配置和基礎配置Web
- 開箱即用的多頁面webpack腳手架Web
- 從零學腳手架(二)---初識webpackWeb
- 看懂前端腳手架你需要這篇webpack前端Web
- React腳手架之NextJsReactNextJS
- 從搭建vue-腳手架到掌握webpack配置(二.外掛與提取)VueWeb
- Vue CLI 3.0腳手架如何在本地配置mock資料VueMock
- 全新打包工具parcel零配置vue開發腳手架Vue
- babel webpack vue 配置檔案支援智慧提示BabelWebVue