不知不覺月底了,都有點不知道本身在忙啥!javascript
最近在重構原來的項目,把一個項目分紅了三個項目。 一個socket的BFF,一個http的BFF,固然還有一個就是純UI項目。html
拆分後的項目都採用的是TypeScript重寫的。
http的BFF和scoket的BFF自己太多說的, http的BFF除了使用http-proxy-middle中間件外,也沒什麼,也許有人就說,你這個其餘使用nginx就完事了。 這個家家有本難唸的經。 由於這個http的BFF有權限檢查,數據聚合,數據過濾,第三方API等請求。java
此外,惟一要說的就是tslint,由於tslint要逐漸退出歷史的舞臺了。 咱們使用eslint來檢查typescipt。 這就的安裝@typescript-eslint/parser
和@typescript-eslint/eslint-plugin
最後大體的樣子就是node
{ "extends": [ "airbnb-base", "plugin:@typescript-eslint/recommended" ], "parser": "@typescript-eslint/parser", "plugins": [ "@typescript-eslint" ], "settings": { "import/resolver": { "node": { "extensions": [ ".ts", ".js" ] } } }, "rules": { }, "globals": { "document": false }, }
能夠看到,上面採用的eslint-config-airbnb-base
規則集合,另外TypeScript也是有本身的規則的,具體的規則能夠在https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/eslint-plugin/docs/rules看到。 而關於airbnb的規則能夠到https://github.com/airbnb/javascript與https://eslint.org/docs/rules/ 去查看。react
eslint-config-airbnb-base
與eslint-config-airbnb
規則集是有很大區別的,本身去百度哈。webpack
具體參考:nginx
@typescript-eslint/eslint-plugin
VScode下搭配ESLint、typescript-eslint的代碼檢查配方
ESLint+Prettier統一TypeScript代碼風格git
在UI項目重構中,遇到的問題就要多一些啦。github
出定義一個自定義模塊, 編寫worker, 外部引用。web
// typings/custom.d.ts declare module "worker-loader!*" { class WebpackWorker extends Worker { constructor(); } export default WebpackWorker; } }
// Worker.ts const ctx: Worker = self as any; // Post data to parent thread ctx.postMessage({ foo: "foo" }); // Respond to message from parent thread ctx.addEventListener("message", (event) => console.log(event));
// App.ts import Worker from "worker-loader!./Worker"; const worker = new Worker(); worker.postMessage({ a: 1 }); worker.onmessage = (event) => {}; worker.addEventListener("message", (event) => {});
參考
大體思路是第三方庫分離成一個vendor,經常使用的工具或者組件分離爲一個common。固然你能夠使用test屬性來自定義。
{ mode: "production", plugins: [htmlStringReplacePlugin, optimizeCssAssetsPlugin], optimization: { minimize: true, splitChunks: { automaticNameDelimiter: "-", cacheGroups: { vender: { name: false, enforce: true, // ignore splitChunks.minSize, splitChunks.minChunks, splitChunks.maxAsyncRequests and splitChunks.maxInitialRequests test: /[\\/]node_modules[\\/]/, chunks: "all", priority: 10, filename: "vender.[hash].js" }, common: { name: false, minChunks: 2, minSize: 0, filename: "common.[hash].js" } } } } };
其次,咱們要對路由進行動態加載, 在新版本的React,已經支持React.lazy。
webpack有專門的guid Lazy-loading, 可是,不生效的。
TypeScript 開發總結做者有提到
compilerOptions: { module: "esnext", },
這裏就要牽扯到 loader的執行順序呢。
算了,完了,先休息啦。