首页 > 解决方案 > 在 IIS (Ip) 上发布的应用程序不知道我的 node_modules

问题描述

我有一个在我的 IIS 上发布的 asp.net core 2.2 应用程序,可以使用http://10.23.44.105:891/ “某些路径”访问它(我修改了 ip)。在这个应用程序中,我用 npm 安装了我需要的东西,我使用了一堆东西,比如 requirejs、multiselect、bootstrap 等。问题显然是,应用程序不知道我的 node_modules。

我认为这与 webconfig 相关,或者我需要告诉应用程序 node_modules 也需要发布。

这是我发布后的 webconfig 文件

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\ProductManagement_WebApplication.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 1bbb425b-0e64-410d-86e5-142483a5f132-->

这是带有所有错误的控制台

GET http://10.23.44.105:891/node_modules/bootstrap/dist/css/bootstrap.min.css net::ERR_ABORTED 404 (Not Found)
BaseProducts:8 

GET http://10.23.44.105:891/node_modules/kendo-ui/styles/kendo.bootstrap-v4.min.css net::ERR_ABORTED 404 (Not Found)
BaseProducts:13 

GET http://10.23.44.105:891/node_modules/codemirror/lib/codemirror.css net::ERR_ABORTED 404 (Not Found)
BaseProducts:14

 GET http://10.23.44.105:891/node_modules/codemirror/theme/material.css net::ERR_ABORTED 404 (Not Found)
BaseProducts:16 

GET http://10.23.44.105:891/node_modules/bootstrap-multiselect/dist/css/bootstrap-multiselect.css net::ERR_ABORTED 404 (Not Found)
BaseProducts:34

 GET http://10.23.44.105:891/node_modules/requirejs/require.js net::ERR_ABORTED 404 (Not Found)
init.js:2 

Uncaught ReferenceError: requirejs is not defined
    at init.js:2

 Uncaught ReferenceError: require is not defined
    at BaseProducts:245

 Uncaught ReferenceError: require is not defined

编辑:除了 npm install 之外的东西会有所帮助。遗憾的是,我不得不修改 node_modules 中的一些 js 文件,因为 requirejs 所以 npm install 不是最好的解决方案。我需要一些东西来强制 node_modules 也出现在已发布的应用程序上。

标签: iisasp.net-corenpmdeploymentmodule

解决方案


找到了解决方案。在您要发布的项目的 csproj 中,您需要告诉您想要 node_modules 包含。默认情况下(我认为)这些不包括在内。所以要包括它们,你需要把它放在那里

`<ItemGroup>
         <Content Include="wwwroot\node_modules\**"   
             CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>

注意:将路径替换为 node_modules 的路径

注意。您可能需要从那里删除对 node_modules 的其他引用。例子:

    <Content Include="wwwroot\node_modules\codemirror\addon\dialog\dialog.css" />
    <Content Include="wwwroot\node_modules\codemirror\addon\display\fullscreen.css" />
    <Content Include="wwwroot\node_modules\codemirror\addon\fold\foldgutter.css" />
    <Content Include="wwwroot\node_modules\codemirror\addon\hint\show-hint.css" />
    <Content Include="wwwroot\node_modules\codemirror\addon\lint\lint.css" />
    <Content Include="wwwroot\node_modules\codemirror\addon\merge\merge.css" />

或代替“内容”是“无”


    <None Include="wwwroot\node_modules\codemirror\addon\lint\json-lint.js" />
    <None Include="wwwroot\node_modules\codemirror\addon\lint\lint.js" />
    <None Include="wwwroot\node_modules\codemirror\addon\lint\yaml-lint.js" />
    <None Include="wwwroot\node_modules\codemirror\addon\merge\merge.js" />
    <None Include="wwwroot\node_modules\codemirror\addon\mode\loadmode.js" />
    <None Include="wwwroot\node_modules\codemirror\addon\mode\multiplex.js" />
    <None Include="wwwroot\node_modules\codemirror\addon\mode\multiplex_test.js" />

我删除了那些并放了第一件事,它起作用了。


推荐阅读