如何让 vite 编译含有 Node.js 模块的 TS 文件 ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING

背景

假如我们的包有个脚本 scripts/check-authorization-update.ts 使用 ts 写的,但是目前(2025-4-10 v23)Node.js 并不支持也不打算支持运行 node_modules 内的 ts 文件(deno 可以),否则会报错 Error [ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING]: Stripping types is currently unsupported for files under node_modules

有几种解决办法:

  1. 【不编译】 重写成 mjs,能最小改动,因为可以保留 import / export 只需将类型改成 tsdoc。
  2. 【不编译】 将需要直接加载的 .ts 文件移出 node_modules 目录,因为 Node.js 对 node_modules 目录下的文件有特殊的处理逻辑,不支持直接加载 TypeScript 文件[1]。这个很巧妙,但是需要再写一个脚本。
  3. 【编译】vite。

本文列举一个通过 vite 编译的方式,将脚本编译为 js。设置如下:

diff 复制代码
index f23ccf7..b3fdc86 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -30,12 +30,18 @@ export default defineConfig({
     sourcemap: true,
 
     lib: {
-      entry: resolve(__dirname, 'src/index.ts'),
+      entry: [
+        resolve(__dirname, 'src/index.ts'),
+        resolve(__dirname, 'scripts/check-authorization-update.ts'),
+      ],
       formats: ['es'],
       fileName: (_format, entryName) => `${entryName}.js`,
     },
 
     rollupOptions: {
+      // 外部化处理 Node.js 原生模块和不想打包在内 node 三方模块(tar)
+      external: ['node:fs', 'node:fs/promises', 'node:path', 'node:https', 'tar'],
+
       output: {
         preserveModules: true, // 保留模块结构,便于 Tree Shaking
       }
相关推荐
LYFlied3 小时前
从循环依赖检查插件Circular Dependency Plugin源码详解Webpack生命周期以及插件开发
前端·webpack·node.js·编译原理·plugin插件开发
by__csdn4 小时前
大前端:定义、演进与实践全景解析
前端·javascript·vue.js·react.js·typescript·ecmascript·动画
Asurplus5 小时前
【VUE】15、安装包管理工具yarn
前端·vue.js·npm·node.js·yarn
by__csdn7 小时前
JavaScript性能优化实战:异步与延迟加载全方位攻略
开发语言·前端·javascript·vue.js·react.js·typescript·ecmascript
doupoa7 小时前
VitePressv2.0 + TailwindCSSv4.1 集成方案
typescript·前端框架·json·html5·postcss
这是个栗子7 小时前
【问题解决】Vue2 与 Vue3项目中 Node.js 版本选择
前端·node.js·nvm
fpl11167 小时前
npm :无法加载文件 D:\...\nodejs\npm.ps1,因为在此系统上禁止运行脚本
前端·vscode·npm·node.js·命令模式
宋冠巡7 小时前
Docker容器化Node.js应用教程
docker·node.js
by__csdn8 小时前
javascript 性能优化实战:异步和延迟加载
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
by__csdn8 小时前
JavaScript性能优化实战:减少DOM操作全方位攻略
前端·javascript·vue.js·react.js·性能优化·typescript