ฉันใช้ npm เพื่อจัดการ jQuery, Bootstrap, Font Awesome และไลบรารีไคลเอนต์ที่คล้ายกันที่ฉันต้องการสำหรับแอปพลิเคชัน ASP.NET Core ของฉัน
วิธีการที่ใช้ได้ผลสำหรับฉันเริ่มต้นด้วยการเพิ่มไฟล์ package.json ลงในโปรเจ็กต์ซึ่งมีลักษณะดังนี้:
{
"version": "1.0.0",
"name": "myapp",
"private": true,
"devDependencies": {
},
"dependencies": {
"bootstrap": "^3.3.6",
"font-awesome": "^4.6.1",
"jquery": "^2.2.3"
}
}
npm คืนค่าแพ็กเกจเหล่านี้ลงในโฟลเดอร์ node_modules ซึ่งอยู่ในระดับเดียวกับ wwwroot ในไดเร็กทอรีโปรเจ็กต์:
เนื่องจาก ASP.NET Core ให้บริการไฟล์แบบคงที่จากโฟลเดอร์ wwwroot และไม่มี node_modules ฉันจึงต้องทำการเปลี่ยนแปลงสองสามอย่างเพื่อให้ทำงานนี้ได้อันแรกคือการเพิ่ม app.UseFileServer ก่อนแอป UseStaticFiles ใน Startup ของฉัน ไฟล์ cs:
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"node_modules")),
RequestPath = new PathString("/node_modules"),
EnableDirectoryBrowsing = true
});
app.UseStaticFiles();
และอันที่สองรวมถึง node_modules ใน PublishOptions ของฉันในไฟล์ project.json:
"publishOptions": {
"include": [
"web.config",
"wwwroot",
"Views",
"node_modules"
]
},
สิ่งนี้ใช้งานได้ในสภาพแวดล้อมการพัฒนาของฉันและยังใช้งานได้เมื่อฉันปรับใช้กับอินสแตนซ์ Azure App Service ของฉัน jquery, bootstrap และไฟล์คงที่ที่น่ากลัวแบบอักษรจะได้รับการบริการที่ดี แต่ฉันไม่แน่ใจเกี่ยวกับการใช้งานนี้
แนวทางที่เหมาะสมในการทำเช่นนี้คืออะไร?
โซลูชันนี้เกิดขึ้นหลังจากรวบรวมข้อมูลจำนวนมากจากแหล่งข้อมูลหลายแหล่งและลองใช้บางส่วนที่ไม่ได้ผลและดูเหมือนว่าเป็นเรื่องแปลกที่ต้องให้บริการไฟล์เหล่านี้จาก wwwroot ภายนอก
คำแนะนำใด ๆ จะได้รับการชื่นชมอย่างมาก
Bundler and Minifier
- ระบุแหล่งที่มาคือภายนอก wwwroot และเมื่อคุณสร้างมันจะสร้าง JS ใน wwwroot นั่นคือวิธีที่เหมาะสม .. คุณไม่ควรให้บริการเนื้อหาจาก node_modules
node_modules
โฟลเดอร์แบบคงที่ ก) นั่นไม่ใช่วิธีการออกแบบระบบนิเวศ b) มีความเสี่ยงด้านความปลอดภัยหนึ่งในแพ็คเกจที่ติดตั้งของคุณอาจรั่วไหลข้อมูลที่ละเอียดอ่อน วิธีที่เหมาะสมคือการตั้งค่าไปป์ไลน์การสร้าง (grunt / gulp / node / webpack) ที่เผยแพร่ไฟล์ไปยังโฟลเดอร์src
หรือwhatever
เฉพาะสำหรับการให้บริการไฟล์ฟ