在IIS(Ip)上发布的应用程序不了解我的node_modules

时间:2019-06-26 06:50:30

标签: iis asp.net-core npm deployment module

我有一个发布在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以外,其他方法也会有所帮助。可悲的是,由于requirejs,我不得不修改node_modules中的一些js文件,因此npm install并不是最好的解决方案。我还需要一些强制将node_modules也发布在已发布的应用程序上。

2 个答案:

答案 0 :(得分:1)

找到了解决方案。在要发布的项目的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" />

我删除了这些内容,然后放第一件事就可以了。

答案 1 :(得分:0)

您可以将所需的node_modules复制到应用程序的wwwroot文件夹中(例如,将gulp脚本绑定为“构建后”操作。

wwwroot的内容包含在发布输出中,以后可以作为静态文件进行访问。