不使用CLI,在代碼中使用webpack來建立React的開發環境
这篇文章是关于什么的?
2023年的JavaScript降临日历已经到了第12天。
一般来说,想要构建Recat环境,通常需要使用create-react-app命令行界面来进行环境配置。但在这里,我们将介绍一种不同的方法,即在代码中调用webpack来进行React环境的搭建。
這篇文章適合對 create-react-app 不感興趣,但對於只使用 CLI 想知道內容的人。此外,雖然本文不涉及 nextjs,但我認為它對於製作類似 nextjs 或 remix 的 React 框架會很有幫助。
综合起来
-
- 以下是对原文的中文转述:
在代码中导入webpack并使用它来编写代码(可能会遇到一些困难)。
对带有jsx的React代码添加/* @jsx React.createElement */注释。
运行编写的webpack代码。
生成bundle文件后,将bundle文件添加到index.html的脚本部分。
检查内容。
实际产物
解释
我会逐一解释上面的总结。
首先,作为前提,在npm或其他方式下创建一个项目,并将React的源代码写在src文件夹下。
写一个引入了webpack的代码。
然后,将src文件夹中的React文件使用webpack打包成一个文件。代码的编写很麻烦,普通的网络搜索只会找到使用CLI的webpack使用方法。我自己的情况下,编写了以下的代码,以便从代码中调用webpack。
import webpack from "webpack";
import { fileURLToPath } from 'url';
import path from "path";
import fs from "fs";
import HtmlWebpackPlugin from "html-webpack-plugin";
import {glob} from "glob";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
(async() => {
const files = (await glob("src/**/*")).map((file) => "./" + file);
const config = {
context: __dirname,
mode: "development",
entry: files,
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js"
},
module: {
rules: [
{
test: /\.jsx|js$/,
++ include: [/node_modules/, path.resolve(__dirname, 'src')],
use: {
loader: 'babel-loader',
options: {
++ presets: ["@babel/preset-react", "@babel/preset-env"],
}
},
}
]
},
plugins: [
++ new HtmlWebpackPlugin({
++ template: './public/index.html',
})
]
}
++ const compiler = webpack(config);
++ compiler.inputFileSystem = fs;
++ compiler.outputFileSystem = fs;
compiler.run((err, stats) => {
if (err) console.log(err);
// console.log(stats);
});
})()
我已经突出显示了重要部分。
特别是,如果没有module.rules[0].include这一行会出现错误,所以请注意。
在React项目的开头添加一个jsx的注释行。
随后,回到React项目,并将其置于首位。
/** @jsx React.createElement */
我会向代码中添加类似的注释行,如果你做过didact的开发,可能已经见过了,但是通过添加这部分代码,可以将jsx语法转换为js对象,用于虚拟DOM的h函数。这次我们将使用React内置的函数React.createElement。
运行编写了Webpack代码的代码
写到这里,终于可以使用 webpack 的代码将代码打包在一起了。
照常进行。
node index.js
使用webpack运行代码。
查看已捆绑的文件。
如果按照这种方式进行操作,打包好的文件将出现在dist目录下,之后使用http-server等工具访问这个文件夹下的index.html,可以确认React是否能够正常运行。
以上です。
那么,祝大家度过愉快的编码生活!