如何从放置我的索引.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 任务,它会在那里运行任务并复制文件夹中的必要文件wwwroot
即 wwwroot/libs
或wwwdata/js
.
当然,您也可以手动复制文件,但这相当糟糕,尤其是当您更新许多依赖项时,很难手动跟踪。
虽然它不会显示在解决方案中(只是间接显示在Dependencies/npm
部分中),但您仍可以通过点击解决方案资源管理器顶部的"显示所有文件"按钮并复制所需的文件来使其可见。
但最好为它设置一个吞噬任务,但这超出了这个问题的范围。