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

时间:2016-02-20 18:03:45

标签: npm asp.net-core asp.net-core-mvc node-modules asp.net-core-1.0

如何从我的index.html所在的wwwroot访问visual studio解决方案文件中未包含的node_modules文件夹。该index.html文件需要引用npm安装的软件包,如angular.js。

但是怎么样?

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

我不想将node_modules文件夹包含在解决方案中,因为这样会减慢所有内容并挂断...

似乎Frontend开发不属于VS ......

2 个答案:

答案 0 :(得分:14)

至少有两个明智的选择:

  • 使用app.UseStaticFiles 投放其他文件夹。原始解决方案来自Ode to Code。我用它 开发,因为Visual Studio似乎并不尊重本地 .npmrc文件设置为prefix = wwwroot/node_modules。理想的情况下, node_modules应捆绑生产。有npm rollup plugin可以使用自动捆绑脚本 import功能(ES2015)。

  • 从CDN服务node_modules (例如unpkg.com)。这很简单,唯一的缺点就是CDN 响应时间,特别是如果您已禁用浏览器缓存 发展目的。

以下是在ASP.NET Core中提供文件夹的代码。您只需要更改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
    });
}

答案 1 :(得分:11)

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

它上面的一切都是禁区。

典型的发布过程是,您在编译或发布ASP.NET webproject时运行的gulp或grunt任务,它将在那里运行任务并复制wwwroot/libs文件夹中的必要文​​件,即wwwdata/jsDependencies/npm

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

虽然它没有显示在解决方案中(只是间接地,在.a { background-color: #ff0000; height: 30%; width: 100%; }部分中),但您仍然可以通过点击"显示所有文件"解决方案资源管理器顶部的按钮,并复制您需要的文件。

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