Подтвердить что ты не робот

Как получить доступ к папке node_modules из wwwroot в проекте asp.net vnext

Как я могу получить доступ к папке node_modules, которая не входит в файл решения visual studio из wwwroot, где помещается мой index.html. Этот файл index.html должен ссылаться на установленные npm пакеты, такие как angular.js.

Но как?

Я не хочу копировать всю папку node_modules в wwwroot. Это не файлы, чтобы жить там...

Я не хочу включать папку node_modules в решение, потому что это замедлит все и повесит трубку...

Кажется, что разработка Frontend принадлежит не VS...

4b9b3361

Ответ 1

Вы не должны получать доступ к файлам извне wwwroot. Папка wwwroot - это общедоступная папка, доступная извне, когда вы ее размещаете.

Все, что над ним, не соответствует действительности.

Типичным процессом публикации является то, что у вас есть задача gulp или grunt, которая выполняется, когда ваш веб-проект ASP.NET компилируется или публикуется, он запускает там задачи и копирует необходимые файлы внутри папки wwwroot т.е. wwwroot/libs или wwwdata/js.

Конечно, вы также можете вручную скопировать файлы, но это довольно плохо, особенно когда вы обновляете многие зависимости, которые трудно отслеживать вручную.

Пока он не отображается в решении (просто косвенно, в разделе Dependencies/npm), вы все равно можете сделать его видимым, нажав кнопку "Показать все файлы" поверх проводника решений и скопируйте нужные файлы,

Но лучше всего настроить для него задачу gulp, но это выходит за рамки этого вопроса.

Ответ 2

Есть как минимум два разумных варианта:

  • Служить другими папками с помощью app.UseStaticFiles. Исходное решение от Ode to Code. Я использую его для потому что Visual Studio, похоже, не уважает локальные .npmrc файл создан с помощью prefix = wwwroot/node_modules. Идеально, node_modules должен быть в комплекте для производства. Существует npm rollup плагин, который может автоматически связывать скрипты, используя 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
    });
}