公司官网,小项目,耗时短,为了更好的说明各部分需要注意的地方,也因为篇幅过长,影响阅读体验,请允许在下的多情,就按实际的开发过程,拆分成了“脚手架搭建(基础)”、“router4.0配置(多页面结构)”、“页面效果实现”、“添加百度地图(自定义)”、“打包发布(结束)”这几个部分,分篇发布。
不作赘述: Node.js 安装配置菜鸟教程
建议安装8.0以上版本,安装指定版本方法:
npm install -g n
n v8.6.0
1.脚手架下载
npm install -g create-react-app
或使用淘宝镜像 npm install -g create-react-app --registry https://registry.npm.taobao.org
2.进入指定路径,建立react项目
create-react-app webname
生成的项目最好不要用驼峰式命名,否则后面生成文件提示也会让你改。
3.静待片刻,给文件的生成一点时间,然后进入目录并启动项目
cd webname
npm run start
这时候浏览器已经打开了这个react项目,我们也就可以开始进行开发啦~
到这里,其实脚手架这部分已经结束了,但是!!!我们还需要antd和webpack,既然用了轮子,那还矜持个什么劲,好用就继续用喽╮(╯▽╰)╭
4.安装antd
不推荐yarn安装,因为以后其他的依赖都要yarn安装才不会报错,强迫症犯了不好治。
npm install antd --save
然后问题来了,既然你看到了这篇,想必也是迷茫狗一只,我就多费些笔墨,说下antd组件如果不按需加载的问题,如图:
就是这样,每个页面的css文件上面都要引入一遍antd.css,麻烦不?且不提性能方面的影响,程序员最怕麻烦了,所以,接下来继续操作:
5.引入 react-app-rewired 并修改 package.json 里的启动配置
npm i react-app-rewired -D
修改package.json文件里的scripts:
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test",
}
然后在项目根目录创建一个 config-overrides.js 文件,用于后面的修改默认配置。
6.使用babel-plugin-import, 一个用于按需加载组件代码和样式的babel插件
npm i babel-plugin-import -D
修改之前创建的 config-overrides.js 文件,把下面的代码拷进去:
const { injectBabelPlugin } = require('react-app-rewired');
module.exports = function override(config, env) {
config = injectBabelPlugin(
['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }],
config,
);
return config;
};
OK啦,import { Button } from ‘antd’; 无需另外引入antd.css了哦~ 哦~好嗨呦……
嗯……是这样的,页面的实现离不开css样式的支持,经常会因为设计稿的需求,手写或修改antd组件的样式,为了满足className的傲娇个性,我经常翻阅辞海,给它们起一些类似于“乌拉那拉氏”这样的名字,后来,我知道了less和sass,看着美丽的树结构,才明白曾经的自己有多傻呢,这个项目我用的是less
7.引入 react-app-rewire 的 less 插件 react-app-rewire-less 来帮助加载 less 样式
npm i --save react-app-rewire-less
修改 config-overrides.js:
const { injectBabelPlugin } = require('react-app-rewired');
const rewireLess = require('react-app-rewire-less');
module.exports = function override(config, env) {
config = injectBabelPlugin(
['import', { libraryName: 'antd', libraryDirectory: 'es', style: true }],
config,
);
config = rewireLess.withLoaderOptions({
modifyVars: { "@primary-color": "#1DA57A" },
javascriptEnabled: true,
})(config, env);
return config;
};
修改后重新运行npm run start,就可以加载less文件了。
多说一点,因为使用了react-app-rewired,这样想暴露所有webpack配置就稍微有些麻烦,在下为了规避webpack配置,从而达到less仅对引用的当前组件有效,也就是,不同的组件内如果有相同的className,但互相不会影响,就在外层使用了动态命名,配合:local(){}:
//about.js
import styles from './about.less';
<div className={styles.aboutbj}>
<div className="about">
<div className="title">公司介绍</div>
</div>
<div className="title">关于我们</div>
</div>
//about.less
:local(.aboutbj) {
.about {
.title {
color: #000;
}
}
.title {
color: #999;
}
}
@media screen and (max-width:496px) {
:local(.aboutbj) {
.about {
.title {
color: #999;
}
}
.title {
color: #000;
}
}
}
}