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

Node中导入/引入文件时如何忽略文件扩展名?

共享配置文件扩展名兼容解决方案

不用维护两份内容重复的文件,以下是几种实用方案:

1. 符号链接(最简方案)

在项目中创建一个不同扩展名的符号链接指向原配置文件,无需修改代码:

  • Linux/macOS终端执行:
    ln -s config.js config.ts
    
  • Windows(需管理员权限)执行:
    mklink config.ts config.js
    

这样config.ts与config.js指向同一实际文件,zx导入config.js、Capacitor导入config.ts均可正常工作,且只需维护一份内容。

2. 调整Capacitor配置的导入方式

因你的配置文件无TypeScript语法,且项目package.json设置了"type": "module"(导致.js文件被识别为ESM),可修改capacitor.config.ts的导入逻辑,用动态导入替代require:

// 替换原require语句
const { default: config } = await import('./config.js');

export default {
  // Capacitor配置内容,使用导入的config
};

若Capacitor不支持顶层await,可改用IIFE包装:

let config;
(async () => {
  config = (await import('./config.js')).default;
})();

export default {
  // 配置内容
};

此方案可保留单份config.js,同时兼容Capacitor的CommonJS环境。

3. 利用package.json的exports字段(Node.js 12+)

在项目根目录package.json中添加exports字段,映射不同导入路径到实际文件:

{
  "type": "module",
  "exports": {
    "./config": "./config.js",
    "./config.ts": "./config.js"
  }
}

这样无论导入import '../config'还是import '../config.ts',Node.js都会解析到config.js。若需兼容CommonJS的require,可扩展为:

{
  "exports": {
    "./config": {
      "import": "./config.js",
      "require": "./config.cjs"
    },
    "./config.ts": {
      "import": "./config.js",
      "require": "./config.cjs"
    }
  }
}

补充:改用JSON格式配置文件

若配置文件仅为纯数据(无JS逻辑),直接命名为config.json是最省心的选择:

  • zx中导入:
    import config from './config.json' assert { type: 'json' };
    
  • Capacitor中导入:
    const config = require('./config.json');
    

JSON格式在ESM和CommonJS环境中均支持,彻底避免扩展名冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:35:25