写在开头
该系列文章主要是本人在学习慕课网React全栈课程中的一些记录和分享。该课程主要是利用React构建cnode网站,接口由cnode官方提供。由于课程中的webpack,babel版本较老,本次分享均是用的webpack4和Babel7。本系列文章重点不是React,主要是分享前端工程化的构建和服务端渲染(SSR)。
本次分享的代码将会放到我的github上面。
工程初始化和webpack基础配置
新建项目文件夹,在cmd窗口中运行npm init,输入一些配置项后即可生成一个npm项目。运行git init,对该项目进行git版本管理。在项目中新建build和client文件夹,build文件夹存放webpack配置文件,client文件夹存放客户端的开发文件。
首先安装基础的依赖React和Webpack。
npm i react -S
npm i webpack -D // -D为开发依赖
npm i webpack-cli -D // webpack4,需要安装cli依赖
新建一些文件
- build/webpack.config.js // webpack配置文件
- client/app.js // 项目的入口文件
- client/App.jsx // react入口文件
webpack基础配置,详细配置可参照官网
const path = require('path') // path包解决不同操作系统中路径不一致问题
function resolvePath(filePath) {
return path.join(__dirname, filePath);
}
module.exports = {
mode: 'development', // 开发模式或生产模式
// 入口文件,webpack编译的入口
entry: {
app: resolvePath('../client/app.js')
},
// 打包后文件的输出地址
output: {
filename: '[name].[hash].js', //name和hash是其中的两个变量
path: resolvePath('../dist'), // 打包后文件的位置
publicPath: '' //
}
}
webpack基本配置完成了,在package.json中的scripts中增加一个build命令
"scripts": {
"build": "webpack --config build/webpack.config.js"
},
在app.js中随便写一点内容,在cmd中运行npm run build,在当前文件夹下会生成一个dist目录,该目录下即为经webpack编译后的文件。该部分代码位于仓库的2-3分支下
如果初始化git后,在项目下添加 .gitignore 文件,用来配置不需要版本管理的文件夹或文件,如node_modules等
babel-loader及babel的配置
由于在项目中用到ES6和jsx语法,所有需要用babel先编译。babel-loader也是react官方的编译器。我们现在app和App文件中写一些简单的内容。
App.jsx
import React from 'react'
// 一个简单的react组件
export default class App extends React.Component {
render() {
return (
<div>This is app</div>
)
}
}
app.js
//将App.jsx中的组件挂载到body上(仅作演示,不建议挂载到body上)
import React from 'react'
import ReactDOM from 'react-dom'
import App from './App'
ReactDOM.render(<App />, document.body)
配置webpack中的loader,loader主要是转换代码的作用,如将jsx代码转为js代码。我们需要安装babel-loader,@babel/core和@babel/preset-react三个依赖,均用-D安装。
resolve: {
extensions: ['.js','.jsx'] // 默认文件后缀。在app.js中,直接引入App,而不是App.jsx。所有的js和jsx文件在引入时均可省略后缀
},
// 配置loader
module: {
rules: [
{
test: /.jsx$/, // 正则,处理以.jsx结尾的文件
loader: 'babel-loader' // 使用的loader
},
{
test: /js$/, // 主要是将ES6或更高级别的无法转为ES5版本
loader: 'babel-loader',
exclude: [
resolvePath('../node_modules') // 忽略node_modules中的文件
]
}
]
},
配置完webpack后,babel还没有生效。需要在项目中新建一个.babelrc文件,配置项如下。
// babel7的配置比较简洁,直接使用官方的preset-react即可。
{
"presets": ["@babel/preset-react"]
}
运行npm run build命令,新生成的js文件就会包含react相关的代码了。
目前生成的文件均为js文件,并没有html文件的生成。我们之需要安装html-webpack-plugin,然后再webpack中配置即可
const HTMLPlugin = require('html-webpack-plugin')
modeule.exports = {
//.........
plugins: [
new HTMLPlugin()
]
}
再次运行build命令后,会再dist目录下生成一个index.html文件,打开即可看见我们再App.jsx中的内容。该部分代码位于仓库的2-4分支下