如何在 vnext 项目中从 wwwroot 访问node_modules文件夹 asp.net



如何从放置我的索引.html的 wwwroot 访问未包含在 Visual Studio 解决方案文件中的node_modules文件夹。该索引.html文件需要引用 npm 安装的包,如 angular.js。

但是怎么做呢?

我不想将整个node_modules文件夹复制到 wwwroot 中。那些不是生活在那里的文件...

我不想将node_modules文件夹包含在解决方案中,因为这会减慢一切并挂断......

似乎前端开发不属于VS...

至少有两个理智的选择:

  • 使用 app.UseStaticFiles 为其他文件夹提供服务。最初的解决方案是从Ode to Code。我用它来开发,因为Visual Studio似乎不尊重本地 .npmrc使用 prefix = wwwroot/node_modules 设置的文件。理想 node_modules应捆绑生产。有 npm 汇总可以使用以下方法自动捆绑脚本的插件 import功能(ES2015)。

  • 从 CDN 提供node_modules(例如 unpkg.com)。这相当简单,唯一的缺点是CDN的响应时间,尤其是当您禁用了浏览器缓存时开发目的。

以下是在 Core 中提供文件夹的代码 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
    });
}

您不应该从 wwwroot 外部访问文件。wwwroot文件夹是托管时可从外部访问的公用文件夹。

上面的一切都是禁区。

典型的发布过程是,当你的 ASP.NET webproject 被编译或发布时,你有一个 gulp 或 grunt 任务,它会在那里运行任务并复制文件夹中的必要文件wwwrootwwwroot/libswwwdata/js.

当然,您也可以手动复制文件,但这相当糟糕,尤其是当您更新许多依赖项时,很难手动跟踪。

虽然它不会显示在解决方案中(只是间接显示在Dependencies/npm部分中),但您仍可以通过点击解决方案资源管理器顶部的"显示所有文件"按钮并复制所需的文件来使其可见。

但最好为它设置一个吞噬任务,但这超出了这个问题的范围。

最新更新