github地址: github.com/XinYueXiao/…
yarn add webpack --save
css
const path = require('path');
module.exports = {
entry: './src/app.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'app.js'
}
};複製代碼
+ var HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
module.exports = {
......
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html'
})
]
};複製代碼
yarn add babel-core@6.26.0 babel-preset-env@1.6.1 babel-loader@7.1.2 --dev
html
module.exports = {
...
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['env']
}
}
}
]
}
...複製代碼
yarn add babel-preset-react@6.24.1
node
yarn add react@16.2.0 react-dom@16.2.0
react
import React from 'react';
import ReactDOM from 'react-dom'
ReactDOM.render(
<h1>hello</h1>,
document.getElementById('app')
)複製代碼
entry: './src/app.jsx',//修改入口文件
module: {
rules: [
{
test: /\.jsx$/,//匹配規則由js->jsx
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['env', 'react']//添加react
}
}
}
]
},
複製代碼
node_modules/.bin/webpack
,在瀏覽器中查看 dist/index.htmlyarn add style-loader@0.19.1 css-loader@0.28.8 --dev
webpack
module: {
rules: [
...,
{//添加樣式loader
test: /\.css$/,
use: [
'style-loader', 'css-loader',
]
}
]
}複製代碼
新建 src/index.css
,在app.jsx引入import './index.css'
git
#app { color: pink; }
github
從新打包 node_modules/.bin/webpack
刷新頁面web
從新打包 node_modules/.bin/webpack
刷新頁面json
查看打包後文件css的渲染要等全部js執行完成才加載,則有一段等待時間,怎麼解決這個問題瀏覽器
yarn add extract-text-webpack-plugin@3.0.2 --dev
按照官方配置修改webpack.config.js
//引入
const ExtractTextPlugin = require("extract-text-webpack-plugin");
//替換module->css
rules: [
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
}
]
//添加plugins
plugins: [
...,
+ new ExtractTextPlugin("index.css"),
]複製代碼
從新打包 node_modules/.bin/webpack
,dist下新增了index.css
文件,
添加了css引入<link href="index.css" rel="stylesheet">
在瀏覽器中查看 dist/index.html樣式已生效
yarn add sass-loader@6.0.6 node-sass@4.10.0 --dev
//添加scss解析
rules: [
...,
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: ["css-loader", "sass-loader"]
})
}
]
複製代碼
index.sass
, 在index.jsx
引入sass,從新打包 node_modules/.bin/webpack
//index.scss
body {
background: beige;
#app {
font-size: 100px;
}
}複製代碼
效果以下:
舒適提示:使用url-loader處理小圖片比較方便,會自動處理成base64
yarn add url-loader@0.6.2 file-loader@1.1.6 --dev
rules: [
...,
{
test: /\.(png|jpg|gif)$/i,
use: [
{
loader: 'url-loader',
options: {
limit: 8192,
},
},
],
},
]複製代碼
body {
background: url('./banner.jpg');
}複製代碼
效果以下:
yarn add font-awesome
並在 app.jsx
中引入 font-awesome/css/font-awesome.min.css
import 'font-awesome/css/font-awesome.min.css'
ReactDOM.render(
<div>
<i className='fa fa-address-book'></i>
<h1>hello</h1>
</div>
,
document.getElementById('app')
)
複製代碼
rules: [
...,
//字體圖表的處理
{
test: /\.(woff|woff2|svg|ttf|eot|otf)$/i,
use: [
{
loader: 'url-loader',
options: {
limit: 8192,
},
},
],
},
]
複製代碼
效果以下:
var HtmlWebpackPlugin = require('html-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const path = require('path');
const webpack = require('webpack')
module.exports = {
entry: './src/app.jsx',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'js/app.js'
},
module: {
rules: [
//react語法處理
{
test: /\.jsx$/,
exclude: /(node_modules)/,
use: {
loader: 'babel-loader',
options: {
presets: ['env', 'react']
}
}
},
//css文件處理
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: "css-loader"
})
},
//sass文件處理
{
test: /\.scss$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader",
use: ["css-loader", "sass-loader"]
})
},
//圖片處理
{
test: /\.(png|jpg|gif)$/i,
use: [
{
loader: 'url-loader',
options: {
limit: 8192,
name: 'resourse/[name].[ext]'
},
},
],
},
//字體圖表的處理
{
test: /\.(woff|woff2|svg|ttf|eot|otf)$/i,
use: [
{
loader: 'url-loader',
options: {
limit: 8192,
name: 'resourse/[name].[ext]'
},
},
],
},
]
},
plugins: [
//處理html文件
new HtmlWebpackPlugin({
template: './src/index.html'
}),
//獨立css文件
new ExtractTextPlugin("css/[name].css"),
//提出公共模塊
new webpack.optimize.CommonsChunkPlugin({
name: 'common',//手動指定的公共模塊
filename: 'js/base.js'
})
]
};複製代碼
發如今每次更新時都要執行 node_modules/.bin/webpack
,很繁瑣,則加入webpack-dev-server
時時更新修改, 步驟以下:
yarn add webpack-dev-server@2.9.7 --dev
並配置webpack.config.js
output: {
path: path.resolve(__dirname, 'dist'),
+ publicPath: '/dist/', //解決啓動後,字體文件404錯誤
filename: 'js/app.js'
},
...,
devServer: {
}複製代碼
node_modules/.bin/webpack-dev-server
進入 http://localhost:8080/dist/
則能夠時時更新修改devServer: {
port: 8022,
}複製代碼
package.json
配置打包命令"scripts": {
"dev": "node_modules/.bin/webpack-dev-server",
//配置線上打包命令
"dist": "node_modules/.bin/webpack -p"
},複製代碼