You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何发布含Node.js模块的ASP.NET Core至IIS及PDF生成故障排查

Fixing "cannot find module 'jsreport-core'" When Deploying ASP.NET Core 2 + Node.js App to IIS

Hey there, I’ve run into this exact issue before—local runs work perfectly, but IIS deployment throws that frustrating missing module error. Let’s walk through the most common fixes to get your app up and running smoothly:

1. Ensure Node.js Dependencies Are Included in Published Output

By default, ASP.NET Core doesn’t automatically copy the node_modules folder to your published files. You need to explicitly tell it to include these dependencies in your .csproj file:

Open your project’s .csproj and add this configuration inside the <Project> tag:

<ItemGroup>
  <!-- Copy the entire node_modules folder to the published directory -->
  <Content Include="node_modules\**">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
  <!-- Include package files in case you need to reinstall dependencies on the server -->
  <Content Include="package.json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
  <Content Include="package-lock.json">
    <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
  </Content>
</ItemGroup>

Before publishing, run npm install --production in your project directory to install only production dependencies (reduces the size of node_modules), then republish your app. After deployment, check the IIS server’s published folder to confirm node_modules/jsreport-core exists with all its files.

2. Fix the Working Directory & Module Path

Sometimes IIS runs your app from a different working directory than expected, causing Node.js to fail locating node_modules. To resolve this:

  • In your Node.js code, explicitly set the module path using your app’s root directory before requiring jsreport-core:
    const path = require('path');
    // Use the app's current working directory to build an absolute path
    const jsreport = require(path.join(process.cwd(), 'node_modules', 'jsreport-core'));
    
  • Verify your IIS site’s Physical Path points directly to the root of your published app (not a subfolder).

3. Configure IIS Application Pool Correctly

Incorrect app pool settings are a frequent culprit here:

  • Set the .NET CLR Version to No Managed Code (ASP.NET Core doesn’t rely on traditional .NET CLR).
  • Enable Load User Profile (under Advanced Settings) to ensure the app pool has access to system paths and proper file permissions.
  • Check the app pool’s Identity has read permissions for the published folder (including node_modules). If you’re using ApplicationPoolIdentity, grant read access to the IIS AppPool\[YourPoolName] user on your published directory.

4. Install Node.js on the IIS Server

Your local environment has Node.js, but the IIS server might not:

  • Install the same (or compatible) Node.js version you used locally on the server.
  • Confirm node and npm are in the system PATH so your ASP.NET Core app can call Node.js without issues.

5. Double-Check Your Module Require Statement

Avoid relative paths that might break in deployment. For example, if your code is in a subfolder like Controllers/, a relative path like ../node_modules/jsreport-core might not resolve correctly on IIS. Stick to absolute paths as shown in step 2 for reliability.

After trying these steps, restart your IIS site and app pool, then test again. If the error persists, double-check that jsreport-core is listed in your package.json dependencies and that it installed correctly in node_modules on the server.

内容的提问来源于stack exchange,提问作者Jmperez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:04:50