如何使用 ES6 模块导入来导入路径

Posted

技术标签:

【中文标题】如何使用 ES6 模块导入来导入路径【英文标题】:How to import path using ES6 module import 【发布时间】:2015-12-06 16:25:36 【问题描述】:

有没有什么好的方法可以优雅地加载模块(IDE 可以建议或进入文件)使用动态路径或从根目录开始导入模块?

import * as Q from 'q';
import * as loopback from 'loopback';
import datasources from '../../../datasources.json';
import app from '../../../server';
import ApiError, ValidationError, DatabaseError from'../../../utils/error-handlers';

【问题讨论】:

破解导入加载器?将node_modules 中的符号链接放入您首选的默认加载位置?使用更扁平的目录结构? 那么在您发布的示例代码中什么不起作用?或者你不喜欢代码的什么地方? @Bergi 代码工作正常,但我不喜欢 ../../ 转到相对目录,而是我想从基本目录转到。假设有目录 a->b->c 来自 c 如果我想在当前结构中转到 b 它将是 '../b' 而不是我想要 'a/b'。 所以你的意思是像import app from '/server'?您的模块加载器负责将这些字符串解析为模块。检查其有关路径支持的文档,并可能提交功能请求。 这与 ES6 无关。 【参考方案1】:

模块标识符甚至不一定是路径。例如,它经常搜索 node_modules 文件夹。快速回答是语法取决于模块加载器。

但实用的答案是,如果您使用 Babel(因为您指定这是 ES6 导入,您可能会这样做),您可以指定一个相对于项目根目录的位置,并在开头使用“@”。例如,在我的 Vue.js 项目中,我有:

import PageFooter from '@/components/PageFooter'

在我的例子中,这可以避免在不同深度拥有复杂的嵌套组件树的问题。

在您的情况下,您可以:

import app from '@/server'

假设服务器位于项目根目录中(例如,作为 server.js 而不是文件夹本身)。

【讨论】:

以上是关于如何使用 ES6 模块导入来导入路径的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 es6 导入加载 emscripten 生成的模块?

如何本地搭建一个支持es6的import from 模块导入环境

如何模拟 ES6 模块的导入?

ES6,如何在一行中导出导入的模块?

export default和export的使用方式

如何从 ES6 模块导入默认和命名