javascript - 使用 Webpack 和 Node.js 的 ClassName/ClassName.js 模块解析
问题描述
我经常在 Javascript 项目中看到以下目录结构和导入模式:
类名/index.js 模式
RepoRoot
|-src
|-index.js
|-ClassName
|-index.js
|-SupportingClass.js
src/ClassName/index.js
import { SupportingClass } from './SupportingClass';
export class ClassName {
// Implementation
}
src/index.js
import { ClassName } from './ClassName';
这一切都很好,花花公子。它允许更清晰地导入 ClassName 类。但是,我不喜欢类文件index.js
的名称与类的名称不同。它:
- 使在文件名搜索中定位文件变得更加困难(VS Code 中的 Command+P)
- 您最终
index.js
会在 IDE 的文件选项卡中得到一个非常无用的信息(是的,我知道一些 IDE 足够聪明,可以在您打开多个同名文件时添加更多上下文。这有帮助,但不是一个真正的解决方案imo) - 其他非索引文件的名称更具描述性:SupportingClass.js、someUtils.js 等。
ClassName/ClassName.js 模式
RepoRoot
|-src
|-index.js
|-ClassName
|-ClassName.js
|-SupportingClass.js
src/ClassName/ClassName.js
import { SupportingClass } from './SupportingClass';
export class ClassName {
// Implementation
}
src/index.js
import { ClassName } from './ClassName/ClassName';
这解决了我提出的所有问题,但使 ClassName 的导入有点重复。对大多数人来说可能没什么大不了的,尤其是现在你的 IDE 能够为你自动导入东西。
然而...
webpack 和 node.js 如何理解开箱即用的如何解释导入路径:
./ClassName
作为./ClassName/index.js
是否有允许它解释的设置或插件:
./ClassName
作为./ClassName/ClassName.js
?
多年来我一直想知道这样的东西是否存在,但从来没有真正找到任何关于它的文献。好奇这里是否有人知道任何事情。
解决方案
您正在处理命名导入和默认导入,可以在此处找到有关此讨论的更多详细信息:
根据您的情况(我没有尝试使用子文件夹,但它应该可以),您可能希望这样组织您的文件:
RepoRoot
|-src
|-index.js
|-ClassName
|-ClassName.js (named module)
|-SupportingClass.js (named module)
|-index.js (default modules)
然后你可以很容易地在src/index.js中导入你的东西,例如:
import ClassName, SupportingClass, { otherValues } from './ClassName'
推荐阅读
- reactjs - 无法在 axios 拦截器中使用反应原生上下文的属性
- c# - Docker 客户端 - Windows 上的独立(便携式)版本
- java - JUnit5 中是否有与 TestNG Reporter 日志类似的日志记录类?
- r - LeafletProxy 在 addPolygons,Shiny 中使用固定的 fillOpacity 更改地图
- angular - Angular 中 MSAL 2 的动态配置
- c - 如何在没有线程和分叉的情况下使用信号量?
- javascript - 如何使用 ExtendScript 在 After Effects 中创建文本框?
- xcode - Unity xcode“FBLPromises.h”文件未找到错误
- c# - Xamarin for Android 上的 CSharpScript
- reactjs - 从偏航和俯仰半径获取笛卡尔坐标