手动搭建React项目脚手架(二)

代码地址

手动搭建React项目脚手架(一)已经打包成功,接下开始写代码

修改index.js文件

import React from "react";
import { render } from "react-dom";

render(<div>my-frame根视图</div>, document.getElementById("root"));

执行 npm run build报错

1.ES6兼容

通常我们需要把采用 ES6 编写的代码转换成目前已经支持良好的 ES5 代码,这包含2件事:

1 把新的 ES6 语法用 ES5 实现,例如 ES6 的 class 语法用 ES5 的 prototype 实现,需要用到:@babel/preset-env。
2 给新的 API 注入 polyfill ,例如项目使用 fetch API 时,只有注入对应的 polyfill 后,才能在低版本浏览器中正常运行,需要用到: @babel/polyfill 。

2.Babel

Babel 是一个JavaScript 编译器

Babel是一个工具链,主要用于将ECMAScript 2015+代码转换为当前和旧版浏览器或环境中的向后兼容版本的JavaScript。以下是Babel可以为您做的主要事情:

1 转换语法
2 目标环境中缺少Polyfill功能(通过@ babel / polyfill)
3 源代码转换(codemods)

执行

npm install  babel-loader   @babel/core  @babel/preset-env  --save  -D

修改 webpack.config.js文件

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
	entry: "./src/index.js",
	output: {
		path: path.resolve(__dirname, "dist"),
		filename: "index.bundle.js",
	},
	plugins: [
		new HtmlWebpackPlugin({
			title: "my-frame",
			filename: "./index.html", //filename配置的html文件目录是相对于webpackConfig.output.path路径而言的,不是相对于当前项目目录结构
			template: "./src/pages/document.ejs",
			templateParameters: {
				context: { config: { publicPath: "/public/" } },
			},
			inject: true, //注入选项 script标签位于html文件的 body 底部
			hash: true, //给生成的 js 文件一个独特的 hash 值
		}),
	],
	//定义多个规则来匹配对应的模块,然后给对应的模块应用指定的loader
	//重置顺序:一组 Loader 的执行顺序默认是从右到左执行,通过 enforce 选项可以让其中一个 Loader 的执行顺序放到最前或者最后
	module: {
		rules: [
			{
				test: /\.js$/, // 注意test的值不是一个字符串,而是一个正则
				exclude: /(node_modules|bower_components)/, // 排除这两个文件不需要打包
				// 使用babel-loader编译js代码
				use: [
					{
						loader: "babel-loader",
						options: {
							presets: ["@babel/preset-env"],
						},
					},
				],
			},
		],
	},
};

执行 npm run build

错误原因:缺少插件:@babel/preset-react

 1 安装插件

npm i @babel/preset-react @babel/plugin-proposal-class-properties @babel/plugin-proposal-class-properties -D

2 在根目录创建.babelrc文件

{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ],
    "plugins": [
        "@babel/plugin-transform-runtime",
        "@babel/plugin-proposal-class-properties"
    ]
}

再执行npm run build打包成功。

在浏览器打开打包好的index.html正常显示。下一篇手动搭建React项目脚手架(三)

推广一下自己开发的微信小程序,有兴趣的朋友可以玩一玩

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值