Как получить доступ к папке модулей узла из wwwroot в asp.net проект vnext
Как я могу получить доступ к папке node_modules, которая не включена в файл решения visual studio из wwwroot, где мой индекс.HTML-код поставить. Этот индекс.html-файл должен ссылаться на установленные пакеты npm, такие как angular.js.
но как?
Я не хочу копировать всю папку node_modules в wwwroot. Это не те файлы, чтобы там жить...
Я не хочу включать папку node_modules в решение, потому что это замедлит все и повесьте трубку...
похоже, Frontend development не принадлежит VS...
2 ответов
вы не должны получать доступ к файлам извне wwwroot
. The wwwroot
папка-это общая папка, доступная извне, когда вы размещаете ее.
все это, нельзя.
типичный процесс публикации заключается в том, что у вас есть задача gulp или grunt, которая выполняется, когда ваш ASP.NET webproject компилируется или публикуется, он будет запускать задачи там и копировать необходимые файлы внутри , т. е. wwwroot/libs
или wwwdata/js
.
конечно, вы также можете вручную скопировать файлы, но это довольно плохо, особенно когда вы обновляете многие зависимости, которые трудно отслеживать вручную.
пока он не отображается в решении (только косвенно, в Dependencies/npm
раздел), вы все равно можете сделать его видимым, нажав кнопку "Показать все файлы" поверх обозревателя решений и скопировать нужные файлы.
но лучше всего настроить задачу глотка для него, но это из сфера охвата данного вопроса.
есть по крайней мере два разумных выбора:
обслуживать другие папки с помощью
app.UseStaticFiles
. Исходное решение от Ода код. Я использую его для разработка, потому что Visual Studio, похоже, не уважает локальные.npmrc
файл настроен сprefix = wwwroot/node_modules
. В идеале,node_modules
должно быть в комплекте для производства. Есть накопительный пакет npm плагин который может автоматически связывать скрипты, используяimport
характеристика (ES2015).служить node_modules от CDN (например unpkg.com). Это довольно просто, единственным недостатком является CDN время ответа, особенно если вы отключили кэширование браузера для цели развития.
вот код для обслуживания папок в ASP.NET ядро. вам нужно только изменить Startup
класс:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...some other stuff
if (env.IsDevelopment())
{
ServeFromDirectory(app, env, "node_modules");
}
}
public void ServeFromDirectory(IApplicationBuilder app, IHostingEnvironment env, string path)
{
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.ContentRootPath, path)
),
RequestPath = "/" + path
});
}