正在深层目录中导入ES6模块
Importing ES6 modules in deep directories
给定此目录树:
components
foo
index.js
bar
index.js
使用babel es6,我想这样做:
import Foo from "./components/foo"
import Bar from "./components/foo/bar"
但它与Module build failed: Error: ENOENT: no such file or directory, open '/Users/jemminger/Development/whatever/components/foo/bar.js'
错误
我能让它工作的唯一方法是:
import Foo from "./components/foo"
import Bar from "./components/foo/bar/index"
或
import Foo from "./components/foo"
import Bar from "./components/foo/bar/"
根据https://nodejs.org/api/modules.html#modules_folders_as_modules默认情况下,我应该能够加载目录的index.js
文件,这种情况发生在foo
,而不是bar
。
这是预期的行为吗?
Nodejs会实时导入您的文件,因此您需要始终关注当前路径。如果您想从同一点开始导入路径,请尝试使用webpack。它有resolve.root
选项,可以随心所欲。只需设置你的组件根:
resolve: {
root: [
__dirname
]
}
我假设webpack.config.js
将被放置在components
目录旁边。然后你可以根据自己的意愿进行导入,但不需要前导./
:
import Foo from "components/foo"
import Bar from "components/foo/bar"
请注意,现在npm模块components
和您的文件之间发生了冲突。在这种情况下,您的代码将具有优先级。
所以,我不确定问题的原因是什么,但今天在同一个项目中尝试复制这个问题时,它按预期工作。也许只是webpack开发服务器重新启动的事实修复了它。显然我不会用电脑。
相关文章:
- 可以合并或嵌套ES6导入
- ES6 (ECMAScript 2015) 模块:导入索引.js
- 如何通过在Meteor中导入不同文件中的es6类来正确使用它们
- 如何将es6导入转换为AMD需要
- 如何执行“变量”ES6导入
- 使用 Babel 转译器导入类并调用带有 ES6 模块的静态方法
- 以其他名称导入 ES6 类
- React ES6 导入无状态组件
- 如何导入“;旧的“;ES6中的ES5代码
- ES6模块导入和依赖关系管理
- 如何将javascript ES6 repo编译输出导入其他repo
- 如何使用npm在ES6中导入moment.js
- 使用module.exports和ES6导出导入
- 如何有条件地导入 ES6 模块
- 解构导入ES6的价差
- 正在深层目录中导入ES6模块
- 将现有AMD模块导入ES6模块
- Ember CLI导入ES6文件到Ember - CLI -builds.js
- 不能在React组件中导入ES6模块
- 在Express提供服务的Angular2中导入ES6模块