Как получить доступ к папке модулей узла из 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
    });
}