npm install -g create-react-app
复制代码
create-react-app <项目名称>
复制代码
cd <项目名>
npm run start
复制代码
{
......
"homepage": ".",
"dependencies": {
"react": "^16.4.0",
"react-dom": "^16.4.0",
"react-scripts": "1.1.4"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
复制代码
http://localhost:3000
访问项目;"homepage": "."
(上面配置文件已给出), 同时build后的项目须要在服务器下才能访问;不然打开的将是空白页面;%PUBLIC_URL%
来指向public目录路径;npm run eject
说明: 执行eject脚本后,项目下会新增或对部分配置文件进行修改;项目下 script 目录存放着脚本文件, config 目录下存放着配置文件
复制代码
npm install less-loader less -dev
复制代码
{
+ test: /\.(css|less)$/,
use: [
require.resolve('style-loader'),
{
loader: require.resolve('css-loader'),
options: {
+ importLoaders: 2,
},
},
{ .... },
+ {
+ loader: require.resolve('less-loader'),
+ }
],
}
复制代码
react-app-rewired 的使用javascript
npm install react-app-rewired --save-dev
复制代码
"scripts": {
+ "start": "react-app-rewired start",
+ "build": "react-app-rewired build",
+ "test": "react-app-rewired test --env=jsdom",
+ "eject": "react-app-rewired eject"
}
复制代码
module.exports = function override(config, env) {
// 在这里添加配置
return config;
}
复制代码
修改配置文件 config-overrides.js 使得项目可以支持 lesscss
# 说明: 这里再也不须要额外单独安装依赖包:less-loader less
npm install react-app-rewire-less --save
复制代码
+ const rewireLess = require('react-app-rewire-less');
module.exports = function override(config, env) {
+ // 只须要一条配置信息便可实现对less的支持
+ config = rewireLess(config, env);
return config;
}
复制代码
react-app-rewired 的使用: 使用上和旧版本基本同样只是在配置上须要额外经过 customize-cra 插件来实现html
npm install react-app-rewired customize-cra --save-dev
复制代码
"scripts": {
+ "start": "react-app-rewired start",
+ "build": "react-app-rewired build",
+ "test": "react-app-rewired test --env=jsdom",
+ "eject": "react-app-rewired eject"
}
复制代码
const { override } = require('customize-cra');
module.exports = override();
复制代码
修改配置文件 config-overrides.js 使得项目可以支持 lessjava
npm install less less-loader --save-dev
复制代码
+ const { override, addLessLoader } = require('customize-cra');
module.exports = override(
+ addLessLoader({
+ strictMath: true,
+ noIeCompat: true
+ })
);
复制代码
npm install antd --save
复制代码
import antd/dist/antd.css
复制代码
import { Button } from 'antd';
复制代码
import Button from 'antd/lib/button';
import 'antd/lib/button/style';
// 或者经过import antd/lib/button/style/css 进行加载样式
复制代码
babel-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件node
暴露配置react
npm run eject
复制代码
npm install babel-plugin-import --save-dev
复制代码
"babel": {
"presets": [
"react-app"
],
"plugins": [
+ ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }]
]
},
复制代码
import { Button } from 'antd';
复制代码
babel-plugin-import 是一个用于按需加载组件代码和样式的 babel 插件;webpack
react-app-rewired 的使用在第四节已经有了详细的描述这里不在赘述;下文直接经过修改 config-overrides.js 配置来实现 antd 的按需加载git
安装依赖包:babel-plugin-importgithub
npm install babel-plugin-import --save-dev
复制代码
+ const { injectBabelPlugin } = require('react-app-rewired');
module.exports = function override(config, env) {
+ config = injectBabelPlugin(['import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }], config);
return config;
};
复制代码
+const { override, addLessLoader, fixBabelImports } = require('customize-cra');
module.exports = override(
addLessLoader({
strictMath: true,
noIeCompat: true
}),
+ fixBabelImports('import', { libraryName: 'antd', libraryDirectory: 'es', style: 'css' }),
);
复制代码
const rewireLess = require('react-app-rewire-less');
const { injectBabelPlugin } = require('react-app-rewired');
module.exports = function override(config, env) {
// 扩展 webpack ==> 支持less
config = rewireLess(config, env);
// 配置 less-loader 加载参数
+ config = rewireLess.withLoaderOptions({modifyVars: { "@primary-color": "#1DA57A" },})(config, env);
// antd 按需加载配置
config = injectBabelPlugin(['import',
{ libraryName: 'antd', libraryDirectory: 'es', style: true }], config);
return config;
}
复制代码
javascriptEnabled: true
style: true
const { override, addLessLoader, fixBabelImports } = require('customize-cra');
module.exports = override(
addLessLoader({
strictMath: true,
noIeCompat: true,
+ javascriptEnabled: true,
+ modifyVars: { "@primary-color": "#1DA570" }
}),
+ fixBabelImports('import', { libraryName: 'antd', libraryDirectory: 'es', style: true }),
);
复制代码
# 若是你的 Babel < 7.x 则安装 babel-plugin-transform-decorators-legacy
npm install --save-dev babel-plugin-transform-decorators-legacy
# 若是你的 Babel >= 7.x 则应该安装 @babel/plugin-proposal-decorators
npm install --save-dev @babel/plugin-proposal-decorators
复制代码
假设当前 Babel >= 7.x, 若是你的 Babel < 7.x 则须要将 ["@babel/plugin-proposal-decorators", {"legacy": true}]
修改成 ["transform-decorators-legacy"]
web
暴露配置
npm run eject
复制代码
"babel": {
"presets": [
"react-app"
],
"plugins": [
+ ["@babel/plugin-proposal-decorators", {"legacy": true}]
]
},
复制代码
// 导入添加babel插件的函数
+const { injectBabelPlugin } = require('react-app-rewired');
module.exports = function override(config, env) {
+ config = injectBabelPlugin(["@babel/plugin-proposal-decorators", {"legacy": true}], config)
return config;
};
复制代码
+const {
+ override, addLessLoader, fixBabelImports,
+ addBabelPlugin, addBabelPlugins, useBabelRc
+} = require('customize-cra');
module.exports = override(
addLessLoader({
strictMath: true,
noIeCompat: true,
javascriptEnabled: true,
modifyVars: { "@primary-color": "#1DA570" }
}),
fixBabelImports('import', { libraryName: 'antd', libraryDirectory: 'es', style: true }),
+ addBabelPlugin(["@babel/plugin-proposal-decorators", {"legacy": true}]),
+ // ...addBabelPlugins(
+ // ["@babel/plugin-proposal-decorators", {"legacy": true}]
+ // ),
+ // useBabelRc(),
);
复制代码
npm run eject
复制代码
...
"eslintConfig": {
// 默认继承 脚手架自带的 eslint 配置
"extends": "react-app",
// 在这里扩展新增配置
"rules":{
// 设置规则,具体看官网用户指南下的规则文档
"eqeqeq": "off"
}
}
复制代码
npm install react-app-rewired react-app-rewire-eslint --save
复制代码
+ const rewireEslint = require('react-app-rewire-eslint');
module.exports = function override(config, env) {
+ config = rewireEslint(config, env);
return config;
}
复制代码
{
"rules": {
// 设置规则,具体看官网用户指南下的规则文档
"eqeqeq": "off"
}
}
复制代码
+ const { override, useEslintRc } = require('customize-cra');
module.exports = override(
+ useEslintRc(),
);
复制代码
{
"rules": {
// 设置规则,具体看官网用户指南下的规则文档
"eqeqeq": "off"
}
}
复制代码
{
....
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test --env=jsdom",
"eject": "react-app-rewired eject"
},
...
}
复制代码
The "injectBabelPlugin" helper has been deprecated as of v2.0. You can use customize-cra plugins in replacement
复制代码