如何从 asp.net vnext 项目中的 wwwroot 访问 node_modules 文件夹
How to access node_modules folder from wwwroot in asp.net vnext project
如何从我的 index.html 所在的 wwwroot 访问未包含在 visual studio 解决方案文件中的 node_modules 文件夹。 index.html 文件需要引用 npm 安装包,如 angular.js.
但是怎么办?
我不想将整个 node_modules 文件夹复制到 wwwroot。这些不是存放在那里的文件...
我不想将 node_modules 文件夹包含到解决方案中,因为这会减慢一切并挂断...
前端开发似乎不属于 VS...
您不应该从 wwwroot
外部访问文件。 wwwroot
文件夹是 public 文件夹,当您托管它时可以从外部访问它。
上面的一切都是禁区。
典型的发布过程是,当您的 ASP.NET web 项目被编译或发布时,您有一个 gulp 或 g运行t 任务 运行s,它运行 那里的任务并复制 wwwroot
文件夹内的必要文件,即 wwwroot/libs
或 wwwdata/js
。
当然您也可以手动复制文件过来,但这很糟糕,尤其是当您更新许多依赖项时,很难手动跟踪。
虽然它没有显示在解决方案中(只是间接地显示在 Dependencies/npm
部分),您仍然可以通过点击解决方案资源管理器顶部的 "Show all files" 按钮使其可见,然后复制你需要的文件。
不过最好给它设置一个gulp任务,但这不在本题范围内
至少有两个理智的选择:
使用 app.UseStaticFiles
服务其他文件夹。原解来自Ode to Code。我用它来
发展,因为 Visual Studio 似乎不尊重当地人
.npmrc
文件设置为 prefix = wwwroot/node_modules
。理想情况下,
node_modules
应该捆绑生产。有 npm rollup
插件 可以使用自动捆绑脚本
import
特性 (ES2015).
从 CDN 提供 node_modules(例如 unpkg.com)。这相当简单,唯一的缺点是 CDN 的
响应时间,特别是如果您禁用了浏览器缓存
开发目的。
这是在 ASP.NET Core 中为文件夹提供服务的代码。 您只需要更改 Startup
class:
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
});
}
如何从我的 index.html 所在的 wwwroot 访问未包含在 visual studio 解决方案文件中的 node_modules 文件夹。 index.html 文件需要引用 npm 安装包,如 angular.js.
但是怎么办?
我不想将整个 node_modules 文件夹复制到 wwwroot。这些不是存放在那里的文件...
我不想将 node_modules 文件夹包含到解决方案中,因为这会减慢一切并挂断...
前端开发似乎不属于 VS...
您不应该从 wwwroot
外部访问文件。 wwwroot
文件夹是 public 文件夹,当您托管它时可以从外部访问它。
上面的一切都是禁区。
典型的发布过程是,当您的 ASP.NET web 项目被编译或发布时,您有一个 gulp 或 g运行t 任务 运行s,它运行 那里的任务并复制 wwwroot
文件夹内的必要文件,即 wwwroot/libs
或 wwwdata/js
。
当然您也可以手动复制文件过来,但这很糟糕,尤其是当您更新许多依赖项时,很难手动跟踪。
虽然它没有显示在解决方案中(只是间接地显示在 Dependencies/npm
部分),您仍然可以通过点击解决方案资源管理器顶部的 "Show all files" 按钮使其可见,然后复制你需要的文件。
不过最好给它设置一个gulp任务,但这不在本题范围内
至少有两个理智的选择:
使用
app.UseStaticFiles
服务其他文件夹。原解来自Ode to Code。我用它来 发展,因为 Visual Studio 似乎不尊重当地人.npmrc
文件设置为prefix = wwwroot/node_modules
。理想情况下,node_modules
应该捆绑生产。有 npm rollup 插件 可以使用自动捆绑脚本import
特性 (ES2015).从 CDN 提供 node_modules(例如 unpkg.com)。这相当简单,唯一的缺点是 CDN 的 响应时间,特别是如果您禁用了浏览器缓存 开发目的。
这是在 ASP.NET Core 中为文件夹提供服务的代码。 您只需要更改 Startup
class:
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
});
}