【问题标题】:Using ASP.NET Core 3.1 with Node.js?将 ASP.NET Core 3.1 与 Node.js 一起使用?
【发布时间】:2020-07-14 15:00:42
【问题描述】:

我读过NodeServices have been deprecated for ASP.NET Core 3.1。是否仍然可以使用 Node.js 将我的 JavaScript 文件构建到 wwwrootdist 文件夹中?

【问题讨论】:

  • 你好,迈克尔,欢迎来到 Stack Overflow。我在下面提供了一般性答案,但确认您今天如何构建 JavaScript 文件会很有用。例如,您使用的是 Gulp.jsGrunt 还是 WebPack?您是否通过例如动态触发客户端构建过程? UseWebpackDevMiddleware()?您的情况的确切答案将取决于您今天使用的构建工具以及您如何称呼它们。

标签: asp.net node.js asp.net-core asp.net-core-3.1 nodeservices


【解决方案1】:

根据NodeServices package,它允许您“在 runtime 在 ASP.NET Core 应用程序中调用 Node.js 模块”(强调我自己的)。 GitHub ReadMe 上更详细地重申了这一点:

此 NuGet 包提供了一种从 .NET 应用程序(通常是 ASP.NET Core Web 应用程序)调用 Node.js 代码的快速且可靠的方法。只要您想在 ASP.NET 中的 runtime 使用 Node/NPM 提供的功能,就可以使用它。

这完全独立于例如在构建时预编译、最小化或移动 JavaScript 文件。

构建时间任务

您不需要也不会需要 NodeServices 来通过以下方式下载 npm 包依赖项:

  • 本地工作站上的命令提示符,
  • 来自 Visual Studio 的内置集成,或
  • 来自构建服务器上的任务(例如,Azure Pipelines 上的 npm 任务)。

同样,要预编译、最小化客户端依赖项并将其从源目录移动到分发目录,您可以(继续?)使用 Gulp.jsGrunt 等工具WebPack,它们都是在 Node.js 之上运行的构建系统。

重要提示:这里的关键区别是您不需要在运行时从您的 .NET 应用程序调用这些工具。您正在将 Node.js 构建工具中的 输出 合并到您的 .NET 应用程序中,但您并没有执行 Node.js 代码作为的一部分em> 你的 .NET 应用程序。

如果您使用 NodeService 在运行时动态执行这些构建任务,则有一个例外。例如,如果您的应用程序配置了UseWebpackDevMiddleware(),那么这将不再有效。在这种情况下,您需要迁移到在部署之前(或期间)发生的构建过程。

网页包

如果您正在使用UseWebpackDevMiddleware(),那么我建议您考虑在本地配置Webpack。这应该是一个非常无缝的过渡。您可以run it manually via the Webpack CLIuse a Visual Studio extension,甚至可能将其集成到您的构建过程中。就个人而言,我在我的开发服务器上手动运行它,然后integrate it into my Azure Pipelines build process

或者,如果您真的想维护对 Webpack 文件的“即时”构建支持,您可以考虑将 Webpack dev server 与 ASP.NET Core 结合使用,如 Best way to integrate webpack builds with ASP.NET Core 3.0? 中所述。

【讨论】:

  • 谢谢 Jeremy,还有哪些其他构建过程?我一直在通过 npm 运行以下命令:webpack --mode=development 但是,我在控制台日志中收到错误“加载资源失败:服务器响应状态为 404(未找到)”的文件用 ASP.net core 2.1 发现
  • @MichaelThompson:主要的 Node 构建系统是 Gulp、Grunt 和 WebPack。 WebPack 是最简单的,所以如果它满足您的需求,请坚持使用它。如果从 CLI 运行该命令在 .NET Core 2.1 中有效,但现在在 .NET Core 3.1 中失败,这与 NodeServices 无关,并且应该作为新问题与您的配置一起发布。但是,作为初始故障排除步骤,运行该命令后,JavaScript 文件是否位于 wwwroot 下的相应分发文件夹中?这将表明这是 WebPack 还是 .Net Core 3 的配置问题。
  • 请记住,除非您使用 UseWebpackDevMiddleware(),否则 ASP.NET Core 完全不知道 WebPack。 WebPack 只是自动化捆绑、缩小和复制客户端文件的过程。运行后,就像您在wwwroot 中手动创建了一个文件一样。如果 WebPack 正在正确处理文件,但它们没有从 ASP.NET Core 3.1 加载,那么您很可能可以在 wwwroot 的输出旁边手动创建一个文件,也 i> 返回 404。在这种情况下,我会确认您已配置 UseStaticFiles()
  • 感谢这项工作。我现在在浏览器控制台日志中有其他错误,但现在会调查这些
猜你喜欢
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 2019-10-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 2020-04-25
  • 2020-10-15
相关资源
最近更新 更多