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

npm workspace下如何读取依赖Lib的d.ts文件及跨包构建结果?

npm Workspace 跨包构建依赖与产物读取方案

一、确保App构建前自动触发Lib的构建

npm本身提供脚本钩子机制,可让App的构建命令自动依赖Lib的构建流程:

  • 在packages/app/package.json中添加prebuild脚本,它会在build命令执行前自动运行:

    {
      "scripts": {
        "prebuild": "npm run build -w packages/lib",
        "build": "vite build"
      }
    }
    

    执行npm run -w packages/app build时,npm会先完成Lib的构建(包括vite-plugin-dts生成d.ts文件),再执行App的Vite构建。

  • 补充场景:如果需要在依赖安装时自动构建Lib,可在packages/lib/package.json中添加prepare脚本,App执行npm install时会自动触发Lib构建,但该逻辑仅覆盖安装场景,构建前的依赖保障仍需prebuild钩子。

二、在App中读取Lib的d.ts产物用于Monaco编辑器

通过Node.js文件系统API在构建/运行阶段读取Lib的d.ts文件,拼接后注入Monaco:

  1. 编写读取Lib类型文件的工具函数:

    // packages/app/src/utils/loadLibTypes.js
    import fs from 'fs/promises';
    import path from 'path';
    
    export async function loadLibTypes() {
      // 指向Lib的d.ts输出目录(根据实际构建配置调整)
      const libDistDir = path.resolve(__dirname, '../../lib/dist');
      const files = await fs.readdir(libDistDir);
      // 读取所有d.ts文件内容并拼接
      const typeContents = await Promise.all(
        files
          .filter(file => file.endsWith('.d.ts'))
          .map(file => fs.readFile(path.join(libDistDir, file), 'utf-8'))
      );
      return typeContents.join('\n');
    }
    
  2. 在Monaco初始化时注入类型:

    // packages/app/src/components/MonacoEditor.js
    import * as monaco from 'monaco-editor';
    import { loadLibTypes } from '../utils/loadLibTypes';
    
    async function initMonaco() {
      const libTypes = await loadLibTypes();
      // 添加为Monaco的额外类型库
      monaco.languages.typescript.typescriptDefaults.addExtraLib(
        libTypes,
        'file:///node_modules/your-lib-name/index.d.ts' // 自定义虚拟路径,确保Monaco识别
      );
    
      // 后续Monaco编辑器初始化逻辑
      monaco.editor.create(document.getElementById('container'), {
        value: '',
        language: 'typescript'
      });
    }
    
    initMonaco();
    

注意事项

  • 确认Lib的Vite配置中,vite-plugin-dts已正确配置输出目录,且packages/lib/package.json的types字段指向生成的入口d.ts文件,方便路径定位。
  • 开发模式下若需实时更新类型,可结合Vite的watch功能,监听Lib的d.ts文件变化,自动重新加载类型内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:42:39