0からwebpackを使って自分のReact足場を構築します.
5051 ワード
react-cli-diy
0からwebpackを使って自分のReact足場を構築します.
ソースアドレス
プロジェクトの使用:
まず、新規プロジェクトディレクトリを作成し、このディレクトリ内で
webpackプロファイルを作成します. webpack.co fig.js/公共構成 webpack.prod.js/生産環境構成 webpack.dev.js/開発環境構成 publicディレクトリを作成して、htmlテンプレートファイルを保存します.
srcディレクトリを作成してフロントエンドプロジェクトを保存するために必要なリソースです.
webpackのインストールに関する依存性:
上記のようにcssを処理すると、スタイルファイルはhtmlのテンプレートに挿入されます.cssファイルから引き離したいです.link方式で紹介します.
公共配置のリガで画像処理を行います.
開発モードはモニターが必要です.
0からwebpackを使って自分のReact足場を構築します.
ソースアドレス
プロジェクトの使用:
git clone [email protected]:TigerHee/react-cli-diy.git
cd react-cli-diy
npm install
:
npm run dev
:
npm run build
実装ステップ:まず、新規プロジェクトディレクトリを作成し、このディレクトリ内で
npm init
初期化プロジェクト環境を実行します.webpackプロファイルを作成します.
srcディレクトリを作成してフロントエンドプロジェクトを保存するために必要なリソースです.
webpackのインストールに関する依存性:
npm i webpack webpack-cli webpack-merge -D
webpack.co.nfig.jsファイルを修正する:module.exports = {
entry: './src/index.js', //
output: { //
filename: 'bundle.[hash:8].js',
path: path.resolve(__dirname, 'dist')
},
}
webpack-mergeを使って、公共配置ファイルをそれぞれ生産と開発に行きます.const merge = require('webpack-merge')
const baseConfig = require('./webpack.config.js')
module.exports = merge(baseConfig, {
//
})
ローカルサービスのインストールと既存のモデルの使用に関する依存:npm i webpack-dev-server html-webpack-plugin -D
共通構成内では、html-webpack-plugin
を使用してindex.plugins: [
new HtmlWebpackPlugin({
template: './public/index.html',
filename: 'index.html',
hash: true, // hash
minify: { // html
removeAttributeQuotes: true, //
collapseWhitespace: true //
}
}),
]
開発モードは開発サーバに使用する必要があります.devServer: { //
port: 3000,
progress: true,
contentBase: './dist',
open: true,
proxy: {
//
}
},
基本構成をアピールした後、package.json
内にスタートスクリプトを設定する."scripts": {
"build": "webpack --config webpack.prod.js",
"dev": "webpack-dev-server --config webpack.dev.js"
},
次に、共通設定でcssとlessを設定します.rules:[
{
test: /\.(css|less)$/,
use: [
'style-loader',
'css-loader',
'postcss-loader',
'less-loader'
]
},
]
postcs-loader対応プレフィックスは、個別のプロファイルpostcs.co nfig.jsが必要です.上記のようにcssを処理すると、スタイルファイルはhtmlのテンプレートに挿入されます.cssファイルから引き離したいです.link方式で紹介します.
npm i mini-css-extract-plugin -D
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
{
module:{
rules: [
{
test: /\.(css|less)$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'less-loader'
]
},
]
},
plugins: [
// css
new MiniCssExtractPlugin({
filename: '[name].[hash:8].css',
chunkFilename: '[id].[hash:8].css',
}),
]
}
このとき、npm run build
を実行すると、前回のパッキングの結果がどこに堆積されているかを確認するために、まずクリアする必要があります.npm i clean-webpack-plugin -D
生産環境の設定を変更する:const { CleanWebpackPlugin } = require('clean-webpack-plugin');
plugins:[
// dist
new CleanWebpackPlugin(),
]
mini-css-extract-plugin
を使ってcssを引き出してlinkにするには、optimize-css-assets-webpack-plugin
を使ってcssを圧縮する必要があります.この方法を使ってcssを圧縮するには、uglifyjs-webpack-plugin
を必要とします.npm i optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin -D
optimization: { //
minimizer: [
new UglifyJsPlugin({ // js
cache: true, //
parallel: true, //
}),
new OptimizeCSSAssetsPlugin({}) // css
]
},
公共配置でjsとjsxを設定します.npm i babel-loader @babel/core @babel/preset-env @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators -D
加えてReactのbabel:npm i @babel/preset-react -D
{
test: /\.(js|jsx)$/,
use: {
loader: 'babel-loader',
options: {
presets: [
'@babel/preset-env',
'@babel/preset-react'
],
plugins: [
["@babel/plugin-proposal-decorators", { "legacy": true }],
["@babel/plugin-proposal-class-properties", { "loose": true }]
]
}
},
exclude: /node_modules/
},
プロジェクト追加のReact依存性:npm i react react-dom -S
index.jsにReactコードを書きます.うん~、実行できます.公共配置のリガで画像処理を行います.
npm i file-loader url-loader -D
{
test: /\.(png|jpg|gif)$/,
use: {
loader: 'url-loader',
options: {
limit: 200 * 1024, // 200k base64
}
}
}
lessにbackground-mageを入れてみてください.ok.開発モードはモニターが必要です.
watch: true,
watchOptions: {
poll: 1000, // 1000
aggregateTimeout: 300, // , ,
ignored: /node_modules/ // ,
},
最後のnpm run build
とnpm run dev
は完璧に動作し、足場の構築に成功しました.