diff options
Diffstat (limited to 'Timeline/ClientApp')
-rw-r--r-- | Timeline/ClientApp/.gitignore | 9 | ||||
-rw-r--r-- | Timeline/ClientApp/.yarnrc.yml | 1 | ||||
-rw-r--r-- | Timeline/ClientApp/README.md | 16 | ||||
-rw-r--r-- | Timeline/ClientApp/package.json | 4 | ||||
-rw-r--r-- | Timeline/ClientApp/webpack.common.ts | 28 | ||||
-rw-r--r-- | Timeline/ClientApp/webpack.config.dev.ts | 35 | ||||
-rw-r--r-- | Timeline/ClientApp/webpack.config.prod.ts | 31 |
7 files changed, 61 insertions, 63 deletions
diff --git a/Timeline/ClientApp/.gitignore b/Timeline/ClientApp/.gitignore index e7a6cf65..cf6c0813 100644 --- a/Timeline/ClientApp/.gitignore +++ b/Timeline/ClientApp/.gitignore @@ -2,8 +2,11 @@ # dependencies /node_modules -/.pnp -.pnp.js + +.yarn/* +!.yarn/cache +!.yarn/releases +!.yarn/plugins # testing /coverage @@ -24,4 +27,4 @@ yarn-error.log* .vscode -dist
\ No newline at end of file +/dist
\ No newline at end of file diff --git a/Timeline/ClientApp/.yarnrc.yml b/Timeline/ClientApp/.yarnrc.yml new file mode 100644 index 00000000..5614d154 --- /dev/null +++ b/Timeline/ClientApp/.yarnrc.yml @@ -0,0 +1 @@ +yarnPath: ".yarn/releases/yarn-berry.js"
diff --git a/Timeline/ClientApp/README.md b/Timeline/ClientApp/README.md deleted file mode 100644 index 9b265493..00000000 --- a/Timeline/ClientApp/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Welcome to Timeline! - -[](https://dev.azure.com/crupest-web/Timeline/_build/latest?definitionId=8&branchName=master) -[](https://dependabot.com) - -This is the first web app front-end of [me](https://github.com/crupest). - -It is written with [React](https://reactjs.org/) and [Typescript](https://www.typescriptlang.org/). - -The final product is hosting on my [Tencent Cloud](https://cloud.tencent.com/) Cloud Virtual Machine on https://www.crupest.xyz. - -Feel free to comment by opening an issue. - -### jibber-jabber - -I used to write the website with Angular, you can find the old project [here](https://github.com/crupest/Timeline-App), in which I build full unit tests and CI/CD. But I finally gave up for the complexity. Then I turned to flutter to build an Android app, which can be found [here](https://github.com/crupest/Timeline-Flutter). But as time passed by, it turned out that it is simpler than Angular but still very complicated. In the end, I got here and met React. First I use [Create React App](https://github.com/facebook/create-react-app) to bootstrap this and later turn to manually configured Webpack. I also adopt the [Material-UI](https://material-ui.com/). diff --git a/Timeline/ClientApp/package.json b/Timeline/ClientApp/package.json index 11130ccb..f47749b0 100644 --- a/Timeline/ClientApp/package.json +++ b/Timeline/ClientApp/package.json @@ -19,6 +19,7 @@ "react-hot-loader": "^4.12.21", "react-i18next": "^11.5.0", "react-responsive": "^8.0.3", + "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "reactstrap": "^8.4.1", "regenerator-runtime": "^0.13.5", @@ -61,6 +62,7 @@ "@types/react": "^16.9.35", "@types/react-dom": "^16.9.8", "@types/react-responsive": "^8.0.2", + "@types/react-router": "^5.1.7", "@types/react-router-dom": "^5.1.5", "@types/reactstrap": "^8.4.2", "@types/webpack": "^4.41.14", @@ -85,7 +87,7 @@ "html-webpack-plugin": "^3.2.0", "html-webpack-template": "^6.2.0", "http-server": "^0.12.3", - "image-webpack-loader": "^6.0.0", + "pnp-webpack-plugin": "^1.6.4", "postcss-loader": "^3.0.0", "prettier": "^2.0.5", "sass": "^1.26.7", diff --git a/Timeline/ClientApp/webpack.common.ts b/Timeline/ClientApp/webpack.common.ts index 9e7da028..c4e95e54 100644 --- a/Timeline/ClientApp/webpack.common.ts +++ b/Timeline/ClientApp/webpack.common.ts @@ -1,11 +1,12 @@ import webpack from 'webpack';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import autoprefixer from 'autoprefixer';
+import htmlWebpackTemplate from 'html-webpack-template';
export const commonRules: webpack.RuleSetRule[] = [
{
test: /\.css$/,
- use: ['style-loader', 'css-loader']
+ use: ['style-loader', 'css-loader'],
},
{
test: /\.(scss)$/,
@@ -15,13 +16,13 @@ export const commonRules: webpack.RuleSetRule[] = [ {
loader: 'postcss-loader',
options: {
- plugins: function() {
+ plugins: function () {
return [autoprefixer];
- }
- }
+ },
+ },
},
- 'sass-loader'
- ]
+ 'sass-loader',
+ ],
},
{
test: /\.(png|jpe?g|gif|svg|woff|woff2|ttf|eot)$/i,
@@ -29,19 +30,16 @@ export const commonRules: webpack.RuleSetRule[] = [ {
loader: 'url-loader',
options: {
- limit: 8192
- }
+ limit: 8192,
+ },
},
- {
- loader: 'image-webpack-loader'
- }
- ]
- }
+ ],
+ },
];
export const htmlCommonConfig: HtmlWebpackPlugin.Options = {
inject: false,
- template: require('html-webpack-template'),
+ template: htmlWebpackTemplate,
appMountId: 'app',
mobile: true,
@@ -55,5 +53,5 @@ export const htmlCommonConfig: HtmlWebpackPlugin.Options = { <meta name="msapplication-TileColor" content="#2d89ef">
<meta name="theme-color" content="#ffffff">
`,
- title: 'Timeline'
+ title: 'Timeline',
};
diff --git a/Timeline/ClientApp/webpack.config.dev.ts b/Timeline/ClientApp/webpack.config.dev.ts index 869b963b..17c227b3 100644 --- a/Timeline/ClientApp/webpack.config.dev.ts +++ b/Timeline/ClientApp/webpack.config.dev.ts @@ -2,6 +2,7 @@ import path from 'path'; import webpack from 'webpack';
import HtmlWebpackPlugin from 'html-webpack-plugin';
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
+import PnpWebpackPlugin from 'pnp-webpack-plugin';
import { commonRules, htmlCommonConfig } from './webpack.common';
@@ -17,16 +18,20 @@ const config: webpack.Configuration = { exclude: /node_modules/,
loader: 'babel-loader',
options: {
- plugins: ['react-hot-loader/babel']
- }
- }
- ]
+ plugins: ['react-hot-loader/babel'],
+ },
+ },
+ ],
},
resolve: {
alias: {
- 'react-dom': '@hot-loader/react-dom'
+ 'react-dom': '@hot-loader/react-dom',
},
- extensions: ['*', '.js', '.jsx', '.ts', '.tsx']
+ extensions: ['*', '.js', '.jsx', '.ts', '.tsx'],
+ plugins: [PnpWebpackPlugin],
+ },
+ resolveLoader: {
+ plugins: [PnpWebpackPlugin.moduleLoader(module)],
},
optimization: {
runtimeChunk: 'single',
@@ -36,16 +41,16 @@ const config: webpack.Configuration = { vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
- chunks: 'all'
- }
- }
- }
+ chunks: 'all',
+ },
+ },
+ },
},
output: {
path: path.resolve(__dirname, 'dist/'),
filename: '[name].[hash].js',
chunkFilename: '[name].[hash].js',
- publicPath: '/'
+ publicPath: '/',
},
devServer: {
contentBase: path.join(__dirname, 'public/'),
@@ -53,16 +58,16 @@ const config: webpack.Configuration = { port: 3000,
publicPath: 'http://localhost:3000/',
historyApiFallback: true,
- hotOnly: true
+ hotOnly: true,
},
plugins: [
new HtmlWebpackPlugin({
...htmlCommonConfig,
- devServer: 'http://localhost:3000'
+ devServer: 'http://localhost:3000',
}),
new ForkTsCheckerWebpackPlugin(),
- new webpack.HotModuleReplacementPlugin()
- ]
+ new webpack.HotModuleReplacementPlugin(),
+ ],
};
export default config;
diff --git a/Timeline/ClientApp/webpack.config.prod.ts b/Timeline/ClientApp/webpack.config.prod.ts index 77ee7966..f7cb0374 100644 --- a/Timeline/ClientApp/webpack.config.prod.ts +++ b/Timeline/ClientApp/webpack.config.prod.ts @@ -4,6 +4,7 @@ import { CleanWebpackPlugin } from 'clean-webpack-plugin'; import HtmlWebpackPlugin from 'html-webpack-plugin';
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
import CopyPlugin from 'copy-webpack-plugin';
+import PnpWebpackPlugin from 'pnp-webpack-plugin';
import { commonRules, htmlCommonConfig } from './webpack.common';
@@ -17,12 +18,16 @@ const config: webpack.Configuration = { {
test: /\.(js|jsx|ts|tsx)$/,
exclude: /node_modules/,
- loader: 'babel-loader'
- }
- ]
+ loader: 'babel-loader',
+ },
+ ],
},
resolve: {
- extensions: ['*', '.js', '.jsx', '.ts', '.tsx']
+ extensions: ['*', '.js', '.jsx', '.ts', '.tsx'],
+ plugins: [PnpWebpackPlugin],
+ },
+ resolveLoader: {
+ plugins: [PnpWebpackPlugin.moduleLoader(module)],
},
optimization: {
runtimeChunk: 'single',
@@ -32,16 +37,16 @@ const config: webpack.Configuration = { vendor: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
- chunks: 'all'
- }
- }
- }
+ chunks: 'all',
+ },
+ },
+ },
},
output: {
path: path.resolve(__dirname, 'dist/'),
filename: '[name].[hash].js',
chunkFilename: '[name].[hash].js',
- publicPath: '/'
+ publicPath: '/',
},
plugins: [
new CleanWebpackPlugin(),
@@ -50,10 +55,10 @@ const config: webpack.Configuration = { new CopyPlugin([
{
from: path.resolve(__dirname, 'public/'),
- to: path.resolve(__dirname, 'dist/')
- }
- ])
- ]
+ to: path.resolve(__dirname, 'dist/'),
+ },
+ ]),
+ ],
};
export default config;
|