这次的目标: 实现基本的webpack打包功能和开发服务
- 建立文件夹并生成
package.json
文件
mkdir step-by-step-react-dev-env
cd step-by-step-react-dev-env
yarn init
注意圈中的两个地方, 把private设置为true, 并把main删掉, 关于这点引用一下官方的解释:
我们还需要调整 package.json 文件,以便确保我们安装包是 private(私有的),并且移除 main 入口。这可以防止意外发布你的代码。
- 安装webpack和所需的plugin
yarn add webpack webpack-cli webpack-dev-server html-webpack-plugin clean-webpack-plugin style-loader css-loader file-loader url-loader --dev
- webpack-dev-server 是一个简单的 web server, 可以让我们在开发中使用http协议并有热更新的功能
- html-webpack-plugin可以帮助我们把打包好的js自动引入html中
- clean-webpack-plugin可以在每次打包前自动清理打包文件夹
- url-loader 可以把较小的图片转为base64 URL
- 添加webpack配置文件
在根目录下添加webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
module: {
rules: [
{
oneOf: [
{
test: [/\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
loader: 'url-loader',
options: {
limit: 10000,
},
},
{
test: /\.css$/,
use: ['style-loader','css-loader'],
sideEffects: true,
},
{
loader: 'file-loader',
exclude: [/\.(js|mjs|jsx|ts|tsx)$/, /\.html$/, /\.json$/],
},
]
}
]
},
devtool: 'source-map',
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template: './src/index.html',
favicon: './src/favicon.ico',
})
],
}
- 配置运行命令
// package.json
{
// ...
"scripts": {
"start": "webpack-dev-server --inline --hot --open --mode=development",
"build": "webpack"
}
}
- 添加自己的代码
在src文件夹中:
- 放入favicon.ico小图标
- 创建index.html
<!-- src/index.html -->
<!-- ... -->
<body>
<div id="root"></div>
</body>
</html>
- 创建index.css
/* src/index.css */
body {
color: salmon;
}
- 创建index.js, 引入css, 并试着写些代码
// src/index.js
import './index.css';
const greetings = 'Hello world!';
document.getElementById('root').innerText = greetings;
现在, 执行 yarn build
, 打包成功后打开dist/index.html, 小图标显示, 文字和颜色也都显示了
执行yarn start
, 开启服务看到同样的效果, 表明我们已经成功打包了小图标, css, js.