如何从我的index.html所在的wwwroot访问visual studio解决方案文件中未包含的node_modules文件夹。该index.html文件需要引用npm安装的软件包,如angular.js。
但是怎么样?我不想将整个node_modules文件夹复制到wwwroot中。那些不是那里的文件......
我不想将node_modules文件夹包含在解决方案中,因为这样会减慢所有内容并挂断...
似乎Frontend开发不属于VS ......
答案 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/js
或Dependencies/npm
。
当然,您也可以手动复制文件,但这相当糟糕,尤其是当您更新许多依赖项时,很难手动跟踪。
虽然它没有显示在解决方案中(只是间接地,在.a {
background-color: #ff0000;
height: 30%;
width: 100%;
}
部分中),但您仍然可以通过点击"显示所有文件"解决方案资源管理器顶部的按钮,并复制您需要的文件。
但是最好为它设置一个gulp任务,但这超出了这个问题的范围。