บันทึก:
มีการประเมินเฟรมเวิร์กองค์ประกอบ UI อื่น ๆ อีกหลายอันและในที่สุดเทมเพลตนี้จะถูกตัดสินด้วย bootstrap
หากต้องการใช้เทมเพลตอื่น ๆ เช่นคาร์บอนหรือวัสดุ UI ดูคำแนะนำการติดตั้งด้านล่างในไฟล์นี้
นี่คือเทมเพลตโครงการและกำลังได้รับการปรับปรุงอย่างต่อเนื่องด้วยการปรับปรุงและส่วนประกอบใหม่จำเป็นต้องใช้เว็บแอปพลิเคชันที่ทันสมัยและหลากหลายมากขึ้น
ที่เก็บเทมเพลตโครงการที่มีโครงการเทมเพลตพร้อมการตั้งค่าต่อไปนี้:
chart - wrapper สำหรับ chart.jschart-box -แผนภูมิที่มีชื่อและปุ่มซูมเต็มหน้าจอdata-grid - Grid Data พร้อมแหล่งข้อมูลระยะไกลที่ใช้ตาราง bootstrapmodal - wrapper สำหรับ bootstrap modalmultiselect - หลายแบบเลื่อนลงเลือกด้วยการค้นหาและการเลื่อนเสมือนoffcanvas - wrapper สำหรับ bootstrap Offcanvaspager - Pager Bootstrap ที่ทำงานกับ Data -Gridplaceholder - ตัวยึดตำแหน่งตามตัวยึด bootstrap ส่วนใหญ่ใช้โดยส่วนประกอบอื่น ๆ เพื่อจัดการสถานะที่ไม่ได้เริ่มต้นsearch-input - อินพุตการค้นหาอย่างง่ายด้วยไอคอนการค้นหาที่จัดการการหมดเวลาการค้นหาและป้องกันไม่ให้มีการร้องขอการค้นหาหลายครั้งเพื่อดูตัวอย่างการใช้งานสำหรับส่วนประกอบเหล่านี้ดูโครงการนี้

ทำตามขั้นตอนเหล่านี้เพื่อสร้างและเรียกใช้แอปพลิเคชันตัวอย่าง RazorSvelte:
ดาวน์โหลด dockerfile จาก https://raw.githubusercontent.com/vb-consulting/razorsvelte/master/dockerfile (หรือเพียงเรียกใช้ wget https: // raw.githubusercontent.com/vb-consulting/razorsvelte/master/master
เปิดพรอมต์คำสั่งและนำทางไปยังโฟลเดอร์ที่คุณบันทึก DockerFile
เรียกใช้คำสั่งต่อไปนี้:
docker build -t razorsvelte . docker run --rm -it -p 5000:80 --name razorsvelte razorsvelte:latest
บันทึก:
หากคุณพยายามเข้าสู่ระบบกับผู้ให้บริการภายนอกคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาด โปรดแก้ไข
appsettings.jsonด้วยรหัสผู้ให้บริการลูกค้าของคุณเองและความลับของลูกค้าและตรวจสอบให้แน่ใจว่าแอปพลิเคชัน OAuth เปลี่ยนเส้นทางไปยัง `localhost: 5000`` - เพื่อเปิดใช้งานคุณสมบัตินี้
/ : หน้าดัชนี - แสดงค่าจากอุปกรณ์ประกอบฉากภายนอก Hello world from svelte และแสดงลิงก์ที่มีประโยชน์/privacy - หน้าตัวอย่างความเป็นส่วนตัวแสดงชื่อ H1 ในหน้า svelte ที่ส่งผ่านจากหน้ามีดโกน ViewData/login - แสดงปุ่มเข้าสู่ระบบภายนอก/authorized - ตัวอย่างหน้าที่ได้รับอนุญาตได้รับการปกป้องด้วยแอตทริบิวต์ Authorize แสดงข้อมูลผู้ใช้ที่ได้รับอนุญาตอย่างง่ายที่ส่งผ่านจากหน้ามีดโกน/401 - ตัวอย่างหน้าโดยไม่ได้รับอนุญาตที่เปลี่ยนเส้นทางเมื่อผู้ใช้ที่ไม่ได้รับอนุญาตพยายามเข้าถึงหน้าเว็บด้วยแอตทริบิวต์ Authorize/404 - ไม่พบหน้าเว็บสำหรับเส้นทางเซิร์ฟเวอร์ที่ไม่รู้จัก/spa ของแอปพลิเคชันหน้าเดียว (SPA) ด้วยส่วนประกอบเราเตอร์ไคลเอ็นต์แฮชแท็กที่แสดงเส้นทางต่าง ๆ ในแฟชั่นสปาหมายเหตุสำคัญ:
wwwroot และโดยปกติคุณสามารถนำเข้าพวกเขาไปยังหน้ามีดโกน (หรือหน้าอื่น ๆ )Svelte เป็นวิธีการใหม่ที่รุนแรงในการสร้างอินเทอร์เฟซผู้ใช้
ในขณะที่เฟรมเวิร์กแบบดั้งเดิมเช่น React และ Vue ทำงานเป็นจำนวนมากในเบราว์เซอร์ - Svelte เปลี่ยนที่ทำงานเป็นขั้นตอนการคอมไพล์ที่เกิดขึ้นเมื่อคุณสร้างแอปของคุณ แทนที่จะใช้เทคนิคต่าง ๆ เช่น DOM เสมือน Dom Diffing Svelte เขียนโค้ดที่ผ่าตัดอัพเดท DOM เมื่อสถานะของแอปของคุณเปลี่ยนไป
Svelte เป็นคอมไพเลอร์ที่สร้างเอาต์พุต JavaScript ขนาดเล็กและเหมาะสมมาก
Svelte รวมตัวมาร์กอัปของคุณเข้ากับเอาท์พุทคอมไพเลอร์ด้วยเช่นกันซึ่งมีขนาดเล็กกว่ามาร์กอัปปกติ
จากนั้นเอาต์พุตคอมไพเลอร์ Svelte จะถูกแคชในเบราว์เซอร์ซึ่งทำให้ทุกคำขอที่ตามมายิ่งเร็วขึ้นเนื่องจากเบราว์เซอร์ไม่จำเป็นต้องดาวน์โหลดมาร์กอัปอีกครั้ง
เนื่องจาก Svelte ผลิต JavaScript วานิลลาบริสุทธิ์จึงไม่มีค่าใช้จ่ายในการรันไทม์ นอกจากนี้ยังหมายความว่าคุณสามารถนำเข้าและมัด (พร้อมกรอบการทำงาน) และกรอบการทำงานที่คุณอาจต้องการอาจนำส่วนประกอบ UI เก่าที่คุณอาจมี ตัวอย่างเช่นรหัสมรดกที่มี jQuery
Svelte ได้กลายเป็นเฟรมเวิร์กเว็บที่เป็นที่รักมากที่สุดสำหรับนักพัฒนาในปี 2564 จากการสำรวจของ Stackoverflow
Rollup ได้รับการกำหนดค่าล่วงหน้าเพื่อทำงานกับโครงการ ASP.NET, รวบรวม, มัดและลบโมดูลที่ไม่ได้ใช้แล้วส่งออกไปยัง wwwroot ของโครงการ ASP.NET ของคุณ
นอกจากนี้คุณยังสามารถใช้หน้า ASP.NET ปกติ (หรือ MVC) ตามปกติตามปกติ
ผลที่ได้คือแอปพลิเคชันเว็บที่ได้รับ การ ปรับปรุง **** *** ด้วย:
และคุณสามารถรวมการเรนเดอร์ฝั่งเซิร์ฟเวอร์เข้ากับการแสดงผลส่วนหน้า SVELTE ที่เหมาะสม
ดีที่สุดของทั้งหมด - คุณสามารถหลีกเลี่ยงการกำหนดค่าที่น่าเบื่อโดยใช้เทมเพลตนี้
$ npx degit vb-consulting/RazorSvelte
> cloned vb-consulting/RazorSvelte#HEAD
$ cd RazorSvelte
$ npm install
...
$ dotnet run
$ npx degit vb-consulting/RazorSvelte#carbon
> cloned vb-consulting/RazorSvelte#carbon
$ cd RazorSvelte
$ npm install
...
$ dotnet run
$ npx degit vb-consulting/RazorSvelte#svelte-material-ui
> cloned vb-consulting/RazorSvelte#svelte-material-ui
$ cd RazorSvelte
$ npm install
...
$ dotnet run
$ npx degit vb-consulting/RazorSvelte#net5
> cloned vb-consulting/RazorSvelte#net5
$ cd RazorSvelte
$ npm install
...
$ dotnet run
ตัวอย่าง jQuery มีเพียงหน้าเดียวที่แสดงวิธีการรวมการใช้ jQuery กับ svelte และ rollup
$ npx degit vb-consulting/RazorSvelte#jquery
> cloned vb-consulting/RazorSvelte#jquery
$ cd RazorSvelte
$ npm install
...
$ dotnet run
บันทึก:
degit เพียงแค่ดาวน์โหลดและคลายเนื้อหาล่าสุดของเนื้อหาของ GIT Repo โดยไม่มีการเริ่มต้นที่เก็บข้อมูล (ไม่เหมือนกับ git clone )เพียงคลิกที่ปุ่มสีเขียวขนาดใหญ่ ให้ใช้แม่แบบนี้
หากคุณต้องการเทมเพลตอื่น ๆ มากกว่าเทมเพลตหลัก (เช่น jQuery หรือ Net5 ตัวอย่าง) - เปลี่ยนสาขาก่อน
หน้ามีดโกนแต่ละหน้ามีไฟล์ซ้อนใหม่สองไฟล์:
MyPage.rollup.config.js - ไฟล์การกำหนดค่าการหมุนสำหรับหน้านี้MyPage.entry.ts - ไฟล์โมดูลตัวพิมพ์จุดเข้าสำหรับหน้านี้บันทึก:
MyPage.cshtml (ผ่านการตั้งค่าไฟล์โครงการ) เพื่อให้ ides เช่น Visualstudio และ Jetbrains Rider จะทำรังพวกเขา*.cshtml และค่า ${basename}.cshtml.cs, ${basename}.entry.ts, ${basename}.rollup.config.js ไฟล์การกำหนดค่านำเข้าทั่วโลก config จาก Scripts/rollup. config` และตั้งค่าต่อไปนี้:
wwwroot /build plus entry module name with the ส่วนขยาย JS`)wwwroot /build plus entry module name with ส่วนขยาย CSS`ดูหน้าตัวอย่างใน repo นี้
โมดูล Typescript รายการนำเข้าไฟล์ svelte สำหรับหน้านี้และส่งคืนแอพ Svelte
ในเทมเพลตนี้ตัวอย่างทั้งหมดใช้ document.body เป็นเป้าหมายแอป นั่นหมายความว่า Pages/Shared/_Layout.cshtml มีเพียงร่างกายเท่านั้น
เนื้อหาของร่างกายถูกแสดงผลโดยหน้ามีดโกนและองค์ประกอบ svelte
หน้ามีดโกนที่เปิดใช้งาน SVELTE แต่ละหน้าจะต้องรวมเอาท์พุท JavaScript และ CSS (ถ้ามี) ตัวอย่างเช่นสำหรับหน้าดัชนี:
@section HeadSection {
< link href = " ~/build/index.css " asp-append-version = " true " rel = " stylesheet " />
< script defer src = " ~/build/index.js " asp-append-version = " true " ></ script >
} ส่วนประกอบ svelte ทั้งหมดและโมดูลเพิ่มเติมอยู่ใน App แยกต่างหาก
แต่ละองค์ประกอบไฟล์ svelte ในรูทถูกใช้โดยหน้ามีดโกนที่เกี่ยวข้องตามที่อธิบายไว้ข้างต้น แต่ละคนจะแสดงส่วนหัวส่วนหลักและส่วนท้ายในตัวอย่างนี้
นั่นหมายความว่ามาร์กอัปส่วนใหญ่ผลิตโดยคอมไพเลอร์ Svelte ในไฟล์ JavaScript เดียวสำหรับแต่ละหน้าโดยมีขนาดเฉลี่ยประมาณ 18KB
การแสดงผลเป็นทันทีและเอาต์พุต JS ถูกแคชบนไคลเอนต์เพื่อลดขนาดการดาวน์โหลด
คำสั่ง DOTNET สำหรับใช้กับส่วนขยายของสคริปต์ NPM UI (เรียกใช้จาก IDE ของคุณ):
dotnet-run สำหรับ dotnet rundotnet-clean : สำหรับ dotnet cleandotnet-build : สำหรับ dotnet buildการสนับสนุนการจัดแต่งทรงผม SCSS
fe-scss-build : สร้างไฟล์ CSS ส่วนกลาง wwwroot/style.css ในรูปแบบบีบอัดจาก App/scss/style.scss ที่นำเข้าfe-scss-watch : สร้างไฟล์ CSS ส่วนกลาง wwwroot/style.css ในรูปแบบที่ไม่ได้บีบอัดจาก App/scss/style.scss ที่นำเข้าและอยู่ในโหมดเรียกซ้ำ สร้างการสนับสนุนสำหรับหน้า Index
fe-build : สร้าง JavaScript สำหรับหน้า Index เอาต์พุตคือ wwwroot/build/index.js ในรูปแบบบีบอัดโดยไม่มีแผนที่แหล่งใด ๆ ไฟล์ JavaScript ไม่สามารถแก้ไขข้อบกพร่องได้ นี่คือการผลิตfe-watch : สร้าง JavaScript สำหรับหน้า Index เอาต์พุตคือ wwwroot/build/index.js ในรูปแบบที่ไม่บีบอัดด้วยแผนที่ต้นทาง ไฟล์ JavaScript สามารถดีบักได้ นี่ไม่ใช่สำหรับการผลิต กระบวนการจะติดตามการเปลี่ยนแปลงไฟล์และสร้างใหม่ตามนั้น สิ่งนี้มีประโยชน์สำหรับกระบวนการพัฒนา หมายเหตุ: ในการสร้างหรือดูหน้าอื่น ๆ คุณสามารถใช้บรรทัดคำสั่งนี้ npm run fe-build <page> หรือ npm run fe-build <page> ซึ่งชื่อหน้าเป็นไฟล์กำหนดค่าตัวพิมพ์เล็กที่ไม่มีส่วนขยาย ตัวอย่างเช่น index สำหรับ ./Pages/Index.rollup.config.js , login สำหรับ ./Pages/Login.rollup.config.js ฯลฯ
ทุกหน้า
fe-build-all : Frontend Build-all เรียก Scripts/build-all.js เพื่อสร้างและรวบรวมทุกหน้าและสไตล์ชีททั้งหมดfe-watch-all: Frontend watch-all. Calls สคริปต์สคริปต์/watch-all.js` เพื่อสร้างรวบรวมและดูทุกหน้าและสไตล์ชีททั้งหมดอื่น:
npm-upgrade : อัปเกรดการพึ่งพา NPM ทั้งหมดเป็นเวอร์ชันล่าสุด ใช้สิ่งนี้ด้วยความระมัดระวัง เพื่อให้สามารถเรียกใช้คำสั่งนี้ได้จำเป็นต้องมีการพึ่งพาการอัปเดต npm-check-updates ใช้ npm install -g npm-check-updates เพื่อติดตั้งcode : เปิดหนึ่งอินสแตนซ์ของ Visual Studio Codebuild-urls - เรียกใช้. Net C# สคริปต์ที่สร้างไฟล์ shared/urls.ts โดยอัตโนมัติที่มี URL แอปพลิเคชันทั้งหมด สร้างแบ็กเอนด์ดำเนินการคำสั่งสคริปต์และมีอยู่ คำสั่งนี้จะใช้คีย์การกำหนดค่า UrlBuilderPathbuild-models - เรียกใช้. NET C# สคริปต์ที่สร้างไฟล์ shared/models.d.ts โดยอัตโนมัติที่มีส่วนต่อประสานโมเดลทั้งหมดจากเนมสเปซรุ่น สร้างแบ็กเอนด์ดำเนินการคำสั่งสคริปต์และมีอยู่ คำสั่งนี้จะสร้างไฟล์ typeScript ที่ตั้งค่าในคีย์การกำหนดค่า TsModelsFilePath ( shared/models.d.ts ) ที่จะมีคลาสสาธารณะ C# ทั้งหมดที่แปลไปยังอินเตอร์เฟส typeScript ที่มีอยู่ในเนมสเปซภายใต้รหัสการกำหนดค่า ModelNamespace ( RazorSvelte.SampleData ) ใช่.
คุณสามารถใช้คอนโซลดีบั๊กเบราว์เซอร์สำหรับการดีบักตามปกติ JavaScript ต้องมีไฟล์ .map ที่เกี่ยวข้อง
ในการสร้างไฟล์ .map Run rollup และการกำหนดค่าเป็นคำสั่งอาร์กิวเมนต์ด้วยสวิตช์ -w ตัวอย่างเช่น:
rollup -c ./Pages/Index.cshtml.js -w
คำสั่งนี้สร้างไฟล์ wwwroot/build/index.js ที่ไม่บีบอัดด้วยแผนที่ที่เกี่ยวข้องที่เปิดใช้งานการดีบักในเบราว์เซอร์ของคุณ
ในแท็บแหล่งที่มาของเบราว์เซอร์คุณจะเห็นไฟล์ App/index.svetle typescript ที่คุณสามารถแก้ไขข้อบกพร่องได้ตามปกติ
นอกจากนี้คำสั่งนี้จะยังคงดูไฟล์ต้นฉบับของคุณต่อไปและจะเพิ่มขึ้นเรื่อย ๆ ในขณะที่คุณเปลี่ยนมันต่อไป
ใช่.
อย่าใช้คำสั่ง "สร้างทั้งหมด" ให้ใช้การสร้างที่เพิ่มขึ้นตามที่อธิบายไว้ข้างต้นในคำถามก่อนหน้า
ไม่คุณไม่จำเป็นต้องมีเซิร์ฟเวอร์ภายนอก
โครงการนี้ใช้เว็บเซิร์ฟเวอร์. NET ในตัว
อย่างไรก็ตามคุณจะต้องติดตั้ง NodeJS และ NPM เพื่อเรียกใช้คำสั่ง Rollup
คุณจะต้องสร้างแอพเข้าสู่ระบบในบริการเหล่านี้เพื่อดึงรหัสไคลเอนต์และค่าความลับของลูกค้าและวางลงในไฟล์การกำหนดค่า
ดู AppSettings.json สำหรับรายละเอียดเพิ่มเติม
เมื่อผ่านการอนุญาตจากผู้ให้บริการภายนอกแอปพลิเคชันจะใช้ JWT Auth สำหรับข้อมูลประจำตัวที่ได้รับการยืนยันแล้วโดยผู้ให้บริการภายนอก ดังนั้นคุณจะต้องกำหนดค่า JwtConfigSection ด้วยค่า:
Secret - สตริงสุ่มลับยาวIssuer - ผู้ออกโทเค็น JWTAudience - ผู้ชมโทเค็น JWTExpirationMin - JWT โทเค็นหมดเวลาในไม่กี่นาทีClockSkewMin - เพิ่มเวลาหมดอายุโทเค็น JWT ตั้งค่าเป็น NULL เพื่อหลีกเลี่ยงRefreshTokenExpirationMin - รีเฟรชโทเค็นหมดอายุนาที ตั้งค่าเป็นโมฆะเพื่อหลีกเลี่ยงการใช้โทเค็นรีเฟรช หากใช้งานจะต้องยาวกว่าการหมดอายุโทเค็นที่จะมีผลCookieExpirationMin - การหมดอายุของคุกกี้ในไม่กี่นาที มันจะต้องยาวที่สุดกว่าการหมดอายุโทเค็นหรือการรีเฟรชโทเค็นหมดอายุหากใช้CookieName - ชื่อของคุกกี้รักษาความปลอดภัย หมายเหตุ: หากใช้ตัวเลือกการรีเฟรชโทเค็นคุณอาจต้องการนำเสนอคลาส RefreshTokenRepository อีกครั้งเพื่อใช้ฐานข้อมูลหรือแคชถาวรบางชนิดแทนที่จะเป็นพจนานุกรมในหน่วยความจำ
การกำหนดเส้นทางหน้ายังคงจัดการบนเซิร์ฟเวอร์โดยเว็บเซิร์ฟเวอร์ ASP.NET นั่นหมายความว่าโครงการนี้ไม่ใช่แอปพลิเคชันหน้าเดียว (SPA) แม้ว่ามาร์กอัปทั้งหมดจะอยู่ในเอาต์พุต SVELTE ซึ่งหมายความว่ามันถูกแคชบนไคลเอนต์ในลักษณะสปา
อย่างไรก็ตามหนึ่งในเส้นทางเซิร์ฟเวอร์ /spa เป็นตัวอย่างของแอปพลิเคชัน SPA หน้านี้ใช้ svelte-spa-router และแสดงมุมมองสปาต่างๆด้วยเส้นทางแฮชแท็ก
ใช่ตัวอย่างเช่นโดยใช้อินพุตที่ซ่อนอยู่
<input id="title" type="hidden" value="@ViewData["Title"]" /> ในหน้าของคุณ import { getValue } from "./shared/config" ;
let title = getValue < string > ( "title" ) ;นอกจากจะง่ายขึ้นและเร็วขึ้นในการพัฒนาและบำรุงรักษาใช่มันเร็วขึ้น มาร์กอัปทั้งหมดมีอยู่และลดลงในไฟล์ JavaScript ที่รวบรวมจากส่วนประกอบ SVELTE ซึ่งจะดาวน์โหลดเป็นครั้งแรกแล้วแคชสำหรับคำขอใหม่ทุกครั้ง
สิ่งนี้จะช่วยลดทราฟฟิกเครือข่ายสำหรับแอปพลิเคชันของคุณอย่างมีนัยสำคัญ
มาร์กอัปจะแสดงผลทันทีเมื่อหน้าโหลด
Copyright (C) Vedran Bilopavlović - VB Consulting และ VB Software 2022 รหัสแหล่งนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT