# 🌁 Π¨Π°Π±Π»ΠΎΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ASP NET CORE MVC, Frontend - Π½Π° TypeScript ## πŸŽ‡ Π­Ρ‚Π°ΠΏΡ‹ наполнСния конфигурациями πŸŽ‡ --- 1. β›… Π˜ΠΌΠΏΠΎΡ€Ρ‚ `tsconfig.json` β›… ---
Π Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄ tsconfig.json ```json { "compilerOptions": { "target": "es2016", // УстанавливаСт ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ JavaScript, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ компилируСтся TypeScript (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ES2016). "module": "es6", // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² процСссС компиляции (ES6 ΠΌΠΎΠ΄ΡƒΠ»ΠΈ). "moduleResolution": "node", // Бпособ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Π² Node.js. "jsx": "preserve", // Как ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ JSX. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС оставляСм JSX Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. "declaration": false, // Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚ΠΈΠΏΠΎΠ² (.d.ts). Π—Π΄Π΅ΡΡŒ это ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ. "removeComments": true, // Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ ΠΈΠ· скомпилированного ΠΊΠΎΠ΄Π°. "noImplicitAny": false, // ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ прСдупрСТдСния ΠΎ нСявных Ρ‚ΠΈΠΏΠ°Ρ… `any` Π² ΠΊΠΎΠ΄Π΅. "noEmitOnError": true, // Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ компиляция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ остановлСна, Ссли Π΅ΡΡ‚ΡŒ ошибки. "sourceMap": true, // Π“Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°Ρ€Ρ‚Ρ‹ исходных ΠΊΠΎΠ΄ΠΎΠ² для упрощСния ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. "esModuleInterop": true, // Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с модулями ES ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ CommonJS ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. "experimentalDecorators": true, // Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² TypeScript. "emitDecoratorMetadata": true, // Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… для Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π°ΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… ΠΊΠ°ΠΊ TypeORM ΠΈΠ»ΠΈ Angular. "outDir": "ScriptsAndCss/JsScripts", // Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ для сохранСния скомпилированных Ρ„Π°ΠΉΠ»ΠΎΠ². "lib": [ "es2016", "dom" ] // Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΏΡ€ΠΈ компиляции (ES2016 ΠΈ DOM). }, "exclude": [ "node_modules" // Π˜ΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠ°ΠΏΠΊΡƒ node_modules ΠΈΠ· процСсса компиляции. ] } ```
--- 2. β›… Π˜ΠΌΠΏΠΎΡ€Ρ‚ `webpack.config.js` β›… ---
Π Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄ webpack.config.js ```js const path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const CssMinimizerPlugin = require('css-minimizer-webpack-plugin'); const TerserPlugin = require('terser-webpack-plugin'); // Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ TerserPlugin module.exports = { entry: { app: './ScriptsAndCss/TypeScripts/main_api.ts', // Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° для JavaScript styles: './ScriptsAndCss/CssFiles/styles.css' // Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° для CSS (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любой CSS-Ρ„Π°ΠΉΠ») }, output: { path: path.resolve(__dirname, 'wwwroot/js'), filename: '[name].min.js' // Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ [name] для динамичСского ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° }, resolve: { extensions: ['.ts', '.js', '.css'] // Π”ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ .css }, module: { rules: [ { test: /\.ts$/, use: 'ts-loader', exclude: /node_modules/ }, { test: /\.css$/, use: [ MiniCssExtractPlugin.loader, // Π˜Π·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ CSS Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ 'css-loader' // ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ @import ΠΈ url() ] } ] }, plugins: [ new MiniCssExtractPlugin({ filename: '../css/app.min.css' // ΠšΡƒΠ΄Π° Webpack Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ CSS-Ρ„Π°ΠΉΠ» }) ], mode: 'development', watch: true, }; ```

> Π’ случаС ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Production Ρ€Π΅Π»ΠΈΠ·Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ `mode: 'development'` Π½Π° `mode: 'production'` Π² Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
Π Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ webpack.config.js ```js mode: 'production', // ИзмСнСн Ρ€Π΅ΠΆΠΈΠΌ Π½Π° production для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ optimization: { minimize: true, // Π’ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ minimizer: [ new TerserPlugin(), // Плагин для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JS new CssMinimizerPlugin() // Плагин для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ CSS ] }, ```
--- 3. β›… Π˜ΠΌΠΏΠΎΡ€Ρ‚ `package.json` - ряд ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΏΠΎΠ΄ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β›… ---
Π Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄ package.json ```json { "version": "1.0.0", "name": "asp.net", "private": true, "devDependencies": { "css-minimizer-webpack-plugin": "7.0.0", "terser-webpack-plugin": "5.3.12", "cytoscape": "^3.31.0", "cytoscape-cose-bilkent": "4.1.0", "grunt": "1.4.1", "style-loader": "^4.0.0", "css-loader": "^7.1.2", "mini-css-extract-plugin": "^2.9.2", "grunt-webpack": "^7.0.0", "webpack-cli": "^6.0.1", "ts-loader": "^9.5.2", "browser-sync": "^3.0.3", "grunt-browser-sync": "^2.2.0", "grunt-contrib-clean": "2.0.0", "grunt-contrib-concat": "2.0.0", "grunt-contrib-cssmin": "5.0.0", "grunt-contrib-uglify": "5.0.1", "grunt-contrib-watch": "1.1.0", "grunt-ts": "6.0.0-beta.22" }, "dependencies": { "cytoscape": "^3.31.0" }, "comments": { "version": "Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.", "name": "Имя вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.", "private": "Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ являСтся ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΌ ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ Π² npm.", "devDependencies": { "css-minimizer-webpack-plugin": "Плагин для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ CSS Ρ„Π°ΠΉΠ»ΠΎΠ² Π² процСссС сборки Webpack.", "terser-webpack-plugin": "Плагин для ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ JavaScript с использованиСм Terser.", "cytoscape": "Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ ΠΈ сСтями.", "cytoscape-cose-bilkent": "Плагин для Cytoscape, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ добавляСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ планирования располоТСния ΡƒΠ·Π»ΠΎΠ².", "grunt": "БистСма Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π°Π΄Π°Ρ‡ для Node.js, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для сборки, ΠΌΠΈΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ тСстирования.", "style-loader": "Π›ΠΎΠ°Π΄Π΅Ρ€ для ΠΈΠ½ΠΆΠ΅ΠΊΡ†ΠΈΠΈ CSS Π² DOM Ρ‡Π΅Ρ€Π΅Π· Ρ‚Π΅Π³ΠΈ `