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

如何在Deno中导入含package.json的本地npm模块文件夹?

问题描述

我在./module文件夹下有一个包含package.json的npm模块,当我在文件中导入该文件夹并使用Deno运行时,抛出错误error: Is a directory (os error 21)。推测该问题是由于模块中没有index.js文件,而是通过package.json中的多个入口字段指向正确的JavaScript文件:

{
    "name": "my-module",
    "main": "../../dist/lib/module/index.js",
    "module": "../../dist/es/module/index.js",
    "es2015": "../../dist/es/module/index.js",
    "jsnext:main": "../../dist/es/module/index.js",
    "types": "../../dist/types/module/index.d.ts",
    "sideEffects": false
}

使用Node.js运行相同代码可正常工作,我尝试过多种import-maps配置,但仍出现相同错误。请问是否可以在Deno中无需导入具体.js文件,直接导入包含package.json的本地npm模块文件夹?

解决方案

目前Deno默认不支持像Node.js那样直接导入包含package.json的本地文件夹并自动解析其入口字段,这是两者模块解析逻辑的差异导致的。不过可以通过以下方式实现类似效果:

  • 正确配置import map映射
    之前的import map配置可能存在格式问题,正确的做法是将本地文件夹路径映射到对应的入口文件,注意映射键需要以/结尾来匹配文件夹导入。例如创建import_map.json:

    {
      "imports": {
        "./module/": "./dist/es/module/index.js"
      }
    }
    

    运行Deno时指定该import map:

    deno run --import-map=import_map.json your-script.js
    
  • 添加index.js重定向文件
    在./module文件夹下创建index.js文件,内容为对目标入口的导出重定向:

    export * from '../../dist/es/module/index.js';
    

    这样Deno导入./module时会自动加载这个index.js,间接指向正确的入口文件,和Node.js的行为对齐。

  • 尝试Deno的npm兼容模式
    如果你的模块是标准npm包结构,可以尝试使用npm:./module的导入方式(需确保本地模块已通过npm link链接到全局,或在项目中作为依赖安装),不过这种方式不如前两种直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:22