javascript - 带有 Node.js 的 ASP.NET Core 2.2 应用程序在 VS 更新后中断

标签 javascript asp.net node.js asp.net-mvc .net-core

注意:有趣的部分在下面的 [Edit 10/22/2020] 下,介绍只是我感到困惑。
我认为这是对 16.8.0 Preview 4.0 的 VS 更新。我很清楚 .NET Core 2.2 已被弃用,不再受支持。我想了解发生了什么。
我们继承了一个 Web 应用程序,该应用程序应该是带有 MVC 的 ASP.NET Core,但看起来它对该基础架构没有太多作用,而是严重依赖 Node.js。这里是 webpack.config.js :

const path = require('path');

module.exports = {
    entry: {
        main: './ClientApp/index.js'
    },
    devtool: 'inline-source-map',
    stats: { modules: false },
    devServer: {
        hot: false
    },
    watchOptions: {
        ignored: /node_modules/
    },
    output: {
        path: path.join(__dirname, '/wwwroot/js/'),
        filename: 'site.js',
        publicPath: '/'
    }
};
声明了一个入口点 ./ClientApp/index.js,直到最近,这似乎确实是在使用 IIS Express 和 Chrome 在 Visual Studio 中启动应用程序时执行的。
但是,自从我更新后,我得到了 Index.cshtml反而。这正是我对带有 MVC 的 ASP.NET 应用程序的期望。
我注意到的一件值得注意的事情是,在依赖项下,我不再看到曾经存在的 any/npm 分支。
我仍在使用 Visual Studio 2019 稳定版的同事仍然有旧的行为,index.js开始了。看起来请求路由行为已经改变。
使用随后的“npm install”重新安装 dotnet SDK 2.2 和 Node.js 并不能修复它,我仍然得到默认页面 Index.cshtml .
问题:究竟是什么让应用程序执行 index.js而不是 Index.cshtml ?我在代码中没有找到对 index.js 的任何引用除了 webpack.config.js 中的声明.我希望找到以 node.exe 开头的内容与 index.js作为一个论点,或一些包装它的陈述。
我试图通过安装 NuGet 包 Node.js 和 Microsoft.AspNetCore.NodeServices 来使其正常工作,这些包以前从未出现过。但它不会恢复所需的行为。
[编辑]
看来我在 webpack.config.js 中为主入口点输入什么并不重要。 ,它只需要符合模式,但它甚至在运行时都不会被查找。我找到了一种显示控制台以查看一些输出的方法。我摆脱了一些警告和错误,但结果仍然相同。毕竟它可能不是路由,它可能一直是同一个页面,只是现在功能失调,因此看起来非常不同。我不知道。这是控制台输出,我希望它能为更多知识渊博的人提供一些警报:
info: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\MaatM\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
Hosting environment: Development
Content root path: D:\Projects\ProjectName
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.NodeServices[0]
      webpack built 33af367a37b276ede2b3 in 2029ms
info: Microsoft.AspNetCore.NodeServices[0]
      i ´¢ówdm´¢ú: Hash: 33af367a37b276ede2b3
      Version: webpack 4.29.5
      Time: 2029ms
      Built at: 2020-10-16 14:22:53
        Asset      Size  Chunks             Chunk Names
      site.js  6.71 MiB    main  [emitted]  main
      Entrypoint main = site.js
info: Microsoft.AspNetCore.NodeServices[0]
      i ´¢ówdm´¢ú: Compiled successfully.
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'Page: /Index'
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[3]
      Route matched with {page = "/Index"}. Executing page /Index
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[101]
      Executing handler method ProjectName.Pages.IndexModel.OnGet with arguments ((null)) - ModelState is Valid
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[102]
      Executed handler method OnGet, returned result .
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[103]
      Executing an implicit handler method - ModelState is Valid
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[104]
      Executed an implicit handler method, returned result Microsoft.AspNetCore.Mvc.RazorPages.PageResult.
info: Microsoft.AspNetCore.Mvc.RazorPages.Internal.PageActionInvoker[4]
      Executed page /Index in 63.434ms
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'Page: /Index'
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 217.9321ms 200 text/html; charset=utf-8
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/css/site.css?123
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/lib/bootstrap/dist/css/bootstrap.css
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/lib/jquery/dist/jquery.js
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/js/site.js
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/lib/bootstrap/dist/js/bootstrap.bundle.js
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 31.0267ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 31.0331ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 19.6686ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 52.5483ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 52.5487ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/css/site.css?123
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 5.9602ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/lib/jquery/dist/jquery.js
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 4.1753ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/lib/bootstrap/dist/js/bootstrap.bundle.js
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 3.914ms 404
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET https://localhost:5001/~/js/site.js
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 4.3371ms 404
一些令人费解的事情:我在第二个Microsoft.AspNetCore.NodeServices[0]下看到一些乱码,然后再往下一点同样的事情。中间写着Entrypoint main = site.js我没有声明。
[编辑 2020 年 10 月 22 日]
出色地。这真让人兴奋。谢谢 M Hornbacher 的评论。
“到 site.js 的链接标签”不在 Index.cshtml 中,我在 _Layout.cshtml 中找到它,它看起来像这样:
<script src="~/js/site.js" asp-append-version="true"></script>
这让我觉得很奇怪。我不熟悉 ~ 语法,我想我会这样写:
<script type="text/javascript" src="/js/site.js"></script>
所以我改变了它,运行它,我得到了一些旧的期望行为!然后我寻找更多出现的 ~/构造,更改它们并立即获得(几乎)所有所需的行为。
显然 ~/的解释坏了,据我了解,这是一个 ASP.NET 的东西,它被服务器上的根路径所取代。或者,更可能的是,应用程序认为 root 发生了变化。所以现在我想知道它在哪里说什么是根?
顺便说一句,如果这很重要,我现在正在使用 Visual Studio 2019 16.8.0 Preview 5.0。该应用程序仍然是 .NET Core 2.2。

最佳答案

我想你知道这一点,但是,~通常代表主目录。在 linux 或 mac 上键入 cd ~它会将您带到当前用户目录。
就像你说的 ~可能是 ASP.net 特定的,我通常不会在部署到 linux 的项目中看到它,它太相对了。
也就是说,这里没有任何 C#/ASP.net 代码可供查看。如果它确实可以在生产服务器上运行,但不能在本地运行,那么您可能会因为 ~ 而无法在生产环境中工作。现在失踪了。
您可能想研究一下 prod 是否真的需要 ~在路径中,如果是,为什么。

So now I am wondering where does it say what is to be root?
基于此:
output: {
        path: path.join(__dirname, '/wwwroot/js/'),
        filename: 'site.js',
        publicPath: '/'
    }
然后__dirname我相信可以根据运行的文件进行更改。
你的js文件site.js要去${__dirname/wwwroot/js/}为了使它工作
<script type="text/javascript" src="/js/site.js"></script>
您的项目的根目录看起来像${__dirname}/wwwroot/我还注意到您的输出中有:
Content root path: D:\Projects\ProjectName
这可能与 __dirname 相同,这是一个猜测,无法根据给出的信息确定更多信息。
我很想知道周围是否有 index/server.js 文件。
以下是一些讨论确定 Node 应用程序根的引用资料:
Determine project root from a running node.js application
https://www.abeautifulsite.net/determining-your-apps-base-directory-in-nodejs

关于javascript - 带有 Node.js 的 ASP.NET Core 2.2 应用程序在 VS 更新后中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64374336/

相关文章:

javascript - 这段代码用 javascript 移动 css 元素有什么问题?

javascript - Jasmine 是否有类似最小起订量的 It.IsAny?

javascript - 如何在客户端(javascript)或服务器端的 asp.net 上将 html 页面的一部分保存为图像或 pdf?

c# - 将数据从 Model 导入 View 时出现无法解决的错误

node.js - NodeJS : callback and Async calls

javascript - 用于提取基于点概念的变量的动态正则表达式

javascript - 如何删除 TestCafe 中的样式属性

c# - 如何创建由 5 个子图组成的图表

javascript - 如何以 JSLint 认可的方式重写这个 while 循环?

javascript - react | Npm 包 - 如何导出 2 个组件以用作 npm 包