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

Visual Studio 2022中.NET Razor 8.0项目的npm与ESM模块使用方案咨询

.NET Razor 8.0项目中管理ESM模块的最佳实践(Visual Studio 2022)

不用手动复制node_modules文件,也不用费劲用gulp逐个配置文件,下面给你两种高效的实现方案,适配不同场景:

方案1:用ESBuild打包(推荐,适合多模块项目)

ESBuild是轻量极速的JS打包工具,能自动处理ESM依赖,还能直接压缩代码,一步把需要的模块打包到wwwroot。

分步操作

  1. 安装ESBuild:在VS终端执行
npm install esbuild --save-dev
  1. 配置打包脚本:打开项目根目录的package.json,在scripts里加一行:
"scripts": {
  "build:js": "esbuild ./src/js/main.js --bundle --minify --outfile=./wwwroot/js/bundle.js"
}
  1. 写你的入口JS:在项目根目录新建src/js/main.js,导入Uppy并写自定义逻辑:
// src/js/main.js
import Uppy from '@uppy/core';
// 要是需要插件(比如Dashboard),先npm install @uppy/dashboard再导入
import Dashboard from '@uppy/dashboard';

// 初始化Uppy
const uppy = new Uppy()
  .use(Dashboard, { target: '#uppy-dashboard' });
  1. 执行打包:终端跑命令npm run build:js,ESBuild会自动把Uppy和所有依赖打包成压缩好的bundle.js,放到wwwroot/js里。
  2. 集成到VS构建:右键项目→属性→生成事件→预生成事件命令行,输入npm run build:js,这样每次VS编译项目时会自动执行打包。
  3. Razor页面引用:
<script type="module" src="~/js/bundle.js"></script>
<div id="uppy-dashboard"></div>

方案2:用LibMan提取(.NET官方工具,适合简单场景)

如果不想用打包工具,LibMan可以直接从node_modules里提取指定的ESM文件,比手动复制更规范可控。

分步操作

  1. 打开LibMan:右键项目→管理客户端库。
  2. 配置libman.json:
{
  "version": "1.0",
  "defaultProvider": "filesystem",
  "libraries": [
    {
      "library": "node_modules/@uppy/core/dist/uppy.esm.min.js",
      "destination": "wwwroot/js/libs/uppy/"
    },
    {
      "library": "node_modules/@uppy/dashboard/dist/dashboard.esm.min.js",
      "destination": "wwwroot/js/libs/uppy/"
    },
    {
      "library": "node_modules/@uppy/core/dist/style.min.css",
      "destination": "wwwroot/css/libs/uppy/"
    }
  ]
}
  1. 同步文件:点击LibMan面板的「同步」按钮,工具会自动把指定文件复制到wwwroot的对应目录。
  2. Razor页面引用(注意加type="module"):
<link rel="stylesheet" href="~/css/libs/uppy/style.min.css">
<script type="module">
  import Uppy from '~/js/libs/uppy/uppy.esm.min.js';
  import Dashboard from '~/js/libs/uppy/dashboard.esm.min.js';

  const uppy = new Uppy()
    .use(Dashboard, { target: '#uppy-dashboard' });
</script>
<div id="uppy-dashboard"></div>

推荐项目结构

你的Razor项目/
├── src/
│   └── js/
│       └── main.js  # 自定义JS入口,导入所有ESM模块
├── wwwroot/
│   ├── js/
│   │   ├── bundle.js  # ESBuild生成的打包文件
│   │   └── libs/      # LibMan提取的文件(方案2用)
│   └── css/
│       └── libs/
├── node_modules/
├── package.json
└── libman.json(方案2用)

关键注意事项

  • 绝对不要直接引用node_modules里的文件:这个目录默认不会被发布到服务器,部署后会报错。
  • 必须加type="module":确保浏览器正确识别ESM模块语法。
  • 多模块项目优先选ESBuild:打包后能减少HTTP请求,还能压缩代码,性能更好;LibMan适合只需要单独几个模块文件的简单场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:17:34