如何使用 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 生成的模块?