Commit 937b7f51 authored by stan.gao's avatar stan.gao 🏀

init

parent a28123cf
Pipeline #334 canceled with stages
const { override, fixBabelImports, addLessLoader, addDecoratorsLegacy, disableEsLint, getBabelLoader } = require('customize-cra');
const fileLoaderMatcher = function (rule) {
return rule.loader && rule.loader.indexOf('file-loader') !== -1;
};
function addPlugin(config) {
config.module.rules[2].oneOf.unshift(
{
test: /\.less$/,
use: [
require.resolve('style-loader'),
require.resolve('css-loader'),
{
loader: require.resolve('postcss-loader'),
options: {
// Necessary for external CSS imports to work
// https://github.com/facebookincubator/create-react-app/issues/2677
ident: 'postcss',
plugins: () => [
require('postcss-flexbugs-fixes'),
require('postcss-preset-env')({
autoprefixer: {
flexbox: 'no-2009',
},
stage: 3,
}),
],
},
},
{
loader: require.resolve('less-loader'),
options: {
javascriptEnabled: true,
// theme vars, also can use theme.js instead of this.
modifyVars: {
'@primary-color': 'rgb(70,124,224)',
},
},
},
],
},
);
// file-loader exclude
const l = getBabelLoader(config, fileLoaderMatcher);
const reg = /\.less$/;
if (Array.isArray(l.exclude)) {
l.exclude.push(reg);
} else if (l.exclude) {
l.exclude = [l.exclude, reg];
} else {
l.exclude = reg;
}
return config;
}
module.exports = override(
addPlugin,
fixBabelImports('import', {
libraryName: 'antd',
style: true, // use less for customized theme
}),
addDecoratorsLegacy(),
disableEsLint(),
);
\ No newline at end of file
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@babel/plugin-proposal-decorators": "^7.7.4",
"@testing-library/jest-dom": "^4.2.4", "@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2", "@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2", "@testing-library/user-event": "^7.1.2",
...@@ -10,17 +11,30 @@ ...@@ -10,17 +11,30 @@
"@types/node": "^12.0.0", "@types/node": "^12.0.0",
"@types/react": "^16.9.0", "@types/react": "^16.9.0",
"@types/react-dom": "^16.9.0", "@types/react-dom": "^16.9.0",
"@types/react-loadable": "^5.5.3",
"@types/react-router-dom": "^5.1.3",
"antd": "^3.26.4",
"babel-plugin-import": "^1.13.0",
"customize-cra": "^0.9.1",
"less": "^3.10.3",
"less-loader": "^5.0.0",
"mobx": "^5.15.1",
"mobx-react": "^6.1.4",
"mobx-react-router": "^4.1.0",
"node-sass": "^4.13.0", "node-sass": "^4.13.0",
"normalize.css": "^8.0.1",
"react": "^16.12.0", "react": "^16.12.0",
"react-app-rewired": "^2.1.5",
"react-dom": "^16.12.0", "react-dom": "^16.12.0",
"react-loadable": "^5.5.0",
"react-router-dom": "^5.1.2", "react-router-dom": "^5.1.2",
"react-scripts": "3.3.0", "react-scripts": "3.3.0",
"typescript": "~3.7.2" "typescript": "~3.7.2"
}, },
"scripts": { "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",
"eject": "react-scripts eject" "eject": "react-scripts eject"
}, },
"eslintConfig": { "eslintConfig": {
......
import React from 'react'; import React from 'react';
import logo from './logo.svg'; import { Router, Route, Switch, Redirect } from "react-router-dom";
import './App.scss'; import { rootRouter } from './router/rootRouter';
import { history as browserHistory } from './common/history';
import { syncHistoryWithStore } from 'mobx-react-router';
import { routerStore } from './store/routerStore';
import { Provider } from 'mobx-react';
import * as mobxStore from './store/index';
const history = syncHistoryWithStore(browserHistory, routerStore);
const App: React.FC = () => { const App: React.FC = () => {
return ( return (
<div className="App"> <Provider {...mobxStore}>
<header className="App-header"> <Router history={history}>
<img src={logo} className="App-logo" alt="logo" /> <Switch>
<p> <Redirect exact from="/" to="/home" />
Edit <code>src/App.tsx</code> and save to reload. <Switch>
</p> {
<a rootRouter.map(({ path, component, ...otherProps }) => (
className="App-link" <Route
href="https://reactjs.org" path={path}
target="_blank" component={component}
rel="noopener noreferrer" {...otherProps}
> key={path}
Learn React />
</a> ))
</header> }
</div> {/* <Route path="*" component={NotFound} /> */}
</Switch>
</Switch>
</Router>
</Provider>
); );
} }
......
import { createBrowserHistory } from 'history';
export const history = createBrowserHistory();
\ No newline at end of file
.jf-loading {
position: absolute;
top: 50%;
left: 50%;
z-index: 1001;
transform: translate3d(-50%, -50%, 0);
display: flex;
justify-content: center;
align-items: center;
&.mask {
top:0;
bottom:0;
right:0;
left:0;
transform: translate3d(0,0,0);
}
}
import React, { FunctionComponent } from 'react';
import { Spin } from 'antd';
import './JFLoading.scss';
interface JFLoadingProps {
mask?: boolean,
loading?: boolean
}
export const JFLoading: FunctionComponent<JFLoadingProps> = ({loading = false, mask = false}) => {
if (!loading) {
return null;
}
return (
<div className={`jf-loading${mask ? ' mask' : ''}`}>
<Spin size="large" />
</div>
)
}
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import './index.scss'; import 'normalize.css';
import App from './App'; import App from './App';
import * as serviceWorker from './serviceWorker'; import * as serviceWorker from './serviceWorker';
......
import React, { Component } from 'react';
export default class Home extends Component {
render() {
return (
<div>
home
</div>
)
}
}
import React from 'react';
import Loadable from 'react-loadable';
import { JFLoading } from '../component/JFLoading/JFLoading';
export const rootRouter = [
{
path: '/home',
component:Loadable({
loader: () => import('../page/Home/Home'),
loading: () => <JFLoading />
})
},
]
\ No newline at end of file
export { routerStore } from './routerStore';
\ No newline at end of file
import { RouterStore } from 'mobx-react-router';
export const routerStore = new RouterStore();
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment