Saya menggunakan npm untuk mengelola jQuery, Bootstrap, Font Awesome dan pustaka klien serupa yang saya perlukan untuk aplikasi ASP.NET Core saya.
Pendekatan yang berhasil untuk saya dimulai dengan menambahkan file package.json ke proyek, yang terlihat seperti ini:
{
"version": "1.0.0",
"name": "myapp",
"private": true,
"devDependencies": {
},
"dependencies": {
"bootstrap": "^3.3.6",
"font-awesome": "^4.6.1",
"jquery": "^2.2.3"
}
}
npm mengembalikan paket-paket ini ke folder node_modules yang berada di level yang sama dengan wwwroot di direktori proyek:
Karena ASP.NET Core melayani file statis dari folder wwwroot, dan node_modules tidak ada di sana, saya harus membuat beberapa perubahan untuk membuat ini berfungsi, yang pertama: menambahkan app.UseFileServer tepat sebelum app.UseStaticFiles di Startup saya. file cs:
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"node_modules")),
RequestPath = new PathString("/node_modules"),
EnableDirectoryBrowsing = true
});
app.UseStaticFiles();
dan yang kedua, termasuk node_modules di publishOptions saya di file project.json:
"publishOptions": {
"include": [
"web.config",
"wwwroot",
"Views",
"node_modules"
]
},
Ini berfungsi di lingkungan pengembangan saya dan juga berfungsi saat saya menerapkannya ke instance Azure App Service saya, file statis jquery, bootstrap, dan font-awesome dilayani dengan baik, tetapi saya tidak yakin tentang penerapan ini.
Apa pendekatan yang tepat untuk melakukan ini?
Solusi ini datang setelah mengumpulkan banyak bit info dari beberapa sumber dan mencoba beberapa yang tidak berhasil, dan tampaknya agak aneh harus menyajikan file-file ini dari luar wwwroot.
Setiap saran akan sangat dihargai.
Bundler and Minifier
- Tentukan sumbernya di luar wwwroot dan ketika Anda membangunnya membangun JS ke wwwroot. Itu adalah cara yang tepat .. Anda tidak boleh menyajikan konten dari node_modules
node_modules
folder secara statis . a) itu bukan cara ekosistem dirancang b) ini adalah risiko keamanan, salah satu paket yang Anda instal mungkin membocorkan informasi sensitif. Cara yang tepat adalah menyiapkan pipeline bangunan (grunt / gulp / node / webpack) yang menerbitkan file ke folder src
atau yang whatever
didedikasikan untuk melayani file front-end statis