人生过半 發表於 2019-6-30 12:18:00

框架篇: React + React-Router + antd + nodejs + express框架搭建(nodejs做前后端server)

<p><span style="font-size: 16px"><strong>前提: nodejs &gt;= 10.0;&nbsp;</strong></span></p>
<p><span style="font-size: 16px">这里不推荐用官网的yarn安装antd的模块,因为后续会出错,错误如图:</span></p>
<p><img src="https://img2018.cnblogs.com/blog/1154698/201906/1154698-20190628074603362-1260098764.png"></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">也不推荐用npx方法来搭建react骨架,也会出错,让我们开始吧!!</span></p>
<p>&nbsp;</p>
<hr>
<p style="text-align: center"><span style="font-size: 18px"><strong>&nbsp;</strong></span></p>
<p style="text-align: center"><span style="font-size: 18px"><strong>前端React+Antd框架搭建</strong></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px"><strong>1.安装并启动create-react-app骨架应用</strong></span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">打开cmd按顺序执行以下指令:</span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">npm install -g create-react-app &nbsp; (全局安装create-react-app, 默认会安装在C盘个人用户下)</span></p>
<p><span style="font-size: 16px">create-react-app my-app (此步安装my-app以及需要的模块到当前文件夹下)</span></p>
<p><span style="font-size: 16px">cd my-app (进入到my-app目录)</span></p>
<p><span style="font-size: 16px">npm start (启动react项目Demo,可输入localhost:3000进入看demo)</span></p>
<p><span style="font-size: 16px">结果如图所示:</span></p>
<p><img src="https://img2018.cnblogs.com/blog/1154698/201906/1154698-20190617215325172-517243316.png"></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px"><strong>2.引入antd</strong></span></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">①npm install antd --save-dev</span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">②修改&nbsp;<code>src/App.js</code>,引入 antd 的按钮组件,代码如下:</span></p>
<div class="cnblogs_code">
<pre>import React, { Component } from 'react'<span>;
import Button from 'antd/lib/button'<span>;
import './App.css'<span>;

class App extends Component {
render() {
    return<span> (
      &lt;div className="App"&gt;
      &lt;Button type="primary"&gt;Button&lt;/Button&gt;
      &lt;/div&gt;
<span>    );
}
}

export default App;</span></span></span></span></span></pre>
</div>
<p>&nbsp;</p>
<p><span style="font-size: 16px">③修改&nbsp;<code>src/App.css</code>,在文件顶部引入&nbsp;<code>antd/dist/antd.css</code>。</span></p>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre>@import '~antd/dist/antd.css';

.App {
text-align: center;
}</pre>
</div>
<p>&nbsp;</p>
<p><span style="font-size: 16px">④执行npm run start,结果如图</span></p>
<p><img src="https://img2018.cnblogs.com/blog/1154698/201906/1154698-20190630103055085-585577868.png"></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px"><strong>3.高级配置</strong></span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">我们现在已经把组件成功运行起来了,但是在实际开发过程中还有很多问题,例如上面的例子实际上加载了全部的 antd 组件的样式(对前端性能是个隐患)。</span></p>
<p><span style="font-size: 16px">此时我们需要对 create-react-app 的默认配置进行自定义,这里我们使用&nbsp;react-app-rewired&nbsp;(一个对 create-react-app 进行自定义配置的社区解决方案)。</span></p>
<p><span style="font-size: 16px">引入 react-app-rewired 并修改 package.json 里的启动配置。由于新的&nbsp;react-app-rewired@2.x&nbsp;版本的关系,我们还需要安装&nbsp;customize-cra。</span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">①npm install react<span class="token operator">-app<span class="token operator">-rewired customize<span class="token operator">-cra --save-dev</span></span></span></span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">②更改package.json</span></p>
<div class="cnblogs_code">
<pre>/* package.json */
"scripts": {
-   "start": "react-scripts start",
+   "start": "react-app-rewired start",
-   "build": "react-scripts build",
+   "build": "react-app-rewired build",
-   "test": "react-scripts test",
+   "test": "react-app-rewired test",
}</pre>
</div>
<p>&nbsp;</p>
<p><span style="font-size: 16px">③然后在项目根目录创建一个&nbsp;<code>config-overrides.js</code>&nbsp;用于修改默认配置。</span></p>
<div class="cnblogs_code">
<pre>module.exports = function<span> override(config, env) {
// do stuff with the webpack config...
return<span> config;
};</span></span></pre>
</div>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">④引入babel插件,执行指令:npm install babel-plugin-import --save-dev</span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">⑤更改config-overrides.js文件</span></p>
<div class="cnblogs_code">
<pre>const { override, fixBabelImports } = require('customize-cra'<span>);


module.exports =<span> override(
fixBabelImports('import'<span>, {
    libraryName: 'antd'<span>,
    libraryDirectory: 'es'<span>,
    style: 'css'<span>,
}),
);</span></span></span></span></span></span></pre>
</div>
<p>&nbsp;</p>
<p><span style="font-size: 16px">⑥移除前面在&nbsp;<code>src/App.css</code>&nbsp;里全量添加的&nbsp;<code>@import '~antd/dist/antd.css',并且</code>修改App.js</span></p>
<div class="cnblogs_code">
<pre>import React, { Component } from 'react'<span>;
import { Button } from 'antd'<span>;
import './App.css'<span>;

class App extends Component {
render() {
    return<span> (
      &lt;div className="App"&gt;
      &lt;Button type="primary"&gt;Button&lt;/Button&gt;
      &lt;/div&gt;
<span>    );
}
}

export default App;</span></span></span></span></span></pre>
</div>
<p><span style="font-size: 16px">&nbsp;</span><span style="font-size: 18px"><strong>&nbsp;</strong></span></p>
<p><span style="font-size: 16px">⑦执行命令npm run start,发觉服务已正常启动,至此我们的react+antd框架已搭建完毕</span></p>
<p>&nbsp;</p>
<hr>
<p>&nbsp;</p>
<p style="text-align: center"><strong><span style="font-size: 18px">后台nodejs+express框架搭建与服务合一</span></strong></p>
<p style="text-align: center">&nbsp;</p>
<p style="text-align: left"><span style="font-size: 16px"><strong><strong>1.express骨架搭建</strong></strong></span></p>
<p style="text-align: left">&nbsp;</p>
<p style="text-align: left">①我们在react根目录下建立server文件夹,如图</p>
<p style="text-align: left"><img src="https://img2018.cnblogs.com/blog/1154698/201906/1154698-20190630113801134-188091814.png"></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">②我们cd进server文件夹,执行express骨架生成器指令:npm install express-generator -g</span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">③执行语句:express --view=pug .</span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">④执行语句:npm install,执行完了后,我们执行npm run start(这里先关掉react的服务),执行结果如图:</span></p>
<p><img src="https://img2018.cnblogs.com/blog/1154698/201906/1154698-20190630114513108-1128412784.png"></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">2.服务合一</span></strong></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">①到这一步,让我们想想,前后端同样是以nodejs+server为基础的,难道我们需要起两个服务不成?当然不对啊。</span></p>
<p><span style="font-size: 16px"> 我们重新进到react的根目录,执行指令:npm run build</span></p>
<p><span style="font-size: 16px">&nbsp;</span></p>
<p><span style="font-size: 16px">②我们将根目录build目录下的文件全部拷贝至server/public目录,然后我们刷新一下网页。诶,出来了。</span></p>
<p>&nbsp;</p>
<p><span style="font-size: 16px">③在最终部署服务环节时,我们即需要用服务合一的方法来部署运行服务(非开发阶段使用,开发阶段使用在下一章会讲解)。</span></p>
<p><img src="https://img2018.cnblogs.com/blog/1154698/201906/1154698-20190630120331259-1689389304.png"></p>
<p>&nbsp;</p>
<hr>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">后续:诶,标题不是有router么?怎么没有router相关的么?到这里,其实我们已经把相关框架大致都搭好啦。</span></strong></p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">下一章我们讲具体该如何运用这个框架进行开发,就不放在这章讲了,不然太长啦!!</span></strong></p><br><br>
来源:https://www.cnblogs.com/tianshu/p/11108576.html
頁: [1]
查看完整版本: 框架篇: React + React-Router + antd + nodejs + express框架搭建(nodejs做前后端server)