JavaScript 模块导入的一个小麻烦
JavaScript 模块导入的一个小麻烦
疯狂的技术宅 前端先锋
翻译:疯狂的技术宅
作者:Dmitri Pavlutin
来源:dmitripavlutin.com
正文共:1031 字
预计阅读时间:5 分钟
1.命名导入和自动完成
假设你编写了一个简单的 JavaScript 模块:
1// stringUtils.js 2export function equalsIgnoreCase(string1, string2) { 3 return string1.toLowerCase() === string2.toLowerCase(); 4}
这是一个模块 stringUtils。该模块有一个导出为 equalsIgnoreCase 的函数,该函数用来比较 2 个忽略大小写的字符串。
一切看起来都没什么问题。
现在让我们尝试在另一个 JavaScript 模块 app 中,从 stringUtils 模块导入 equalsIgnoreCase 函数:
1// app.js 2import { equalsIgnoreCase } from './stringUtils'; 3 4equalsIgnoreCase('Hello', 'hello'); // => true
你很可能会通过以下方式编写代码:
JavaScript 导入模块操作时很难自动完成
首先,你必须先写好 import {}。在此步骤中,IDE 无法提供任何有关要导入的模块名称的建议。
然后,你继续敲下 from './stringUtils'。然后移回大括号并展开自动完成提示来选择要导入的名称。
尽管 ES2015 的模块优点很多,但 import module 语法使自动完成功能难以使用。
2. Python 是怎么做的
现在,让我们看看在 Python 中导入命名组件是否存在同样的问题。
这是在 Python 中实现的相同模块 stringUtils 和函数 equalsIgnoreCase 的代码:
1# stringUtils.py 2def equalsIgnoreCase(string1, string2): 3 return string1.lower() == string2.lower()
在 Python 中,你无需明确指出要导出的函数。
现在,在另一个 Python 模块 app 内,让我们尝试从 stringUtils 中导入函数 equalsIgnoreCase:
1# app.py 2from stringUtils import equalsIgnoreCase 3 4equalsIgnoreCase('Hello', 'hello') # => true
你很可能会通过以下方式编写 app 模块:
Python 导入模块的自动完成功能很好
在 Python 中,首先指出要从中导入的模块:from from stringUtils。然后再编写要导入的内容 import ...。
如果你想了解更多可以导入的函数,实际上编辑器早已经知道模块名称并能够提供必要的建议。做的不错!
3. 解决方案
对 JavaScript 中的命名导入启用自动完成功能,我可以找到的唯一解决方案是向 IDE 寻求帮助。
例如,在 Visual Studio Code 中,你可以安装 JavaScript (ES6) code snippets 插件。
启用插件后,通过先敲下 imd 并按 tab 键,光标会首先跳到你编写模块路径的位置。然后再按 tab 键,光标跳回到大括号内的导入位置。运作方式如下:
带插件的 JavaScript 导入模块自动完成
4. 总结
在 JavaScript 中,import 语法会强制你先指出要导入的项目(函数、类、变量),然后再指明模块的路径。这种方法对自动完成是很不友好的。
相反,在 Python 中首先指定模块名称,然后指定要导入的组件:from stringUtils import equalsIgnoreCase。使用此语法可以轻松自动完成导入的项目。
通过使用 IDE 的可能性,例如 ES6 code snippet 插件,你可以部分解决 JavaScript 中命名导入自动完成的问题。总比没有好。
原文链接
https://dmitripavlutin.com/javascript-import-module-drawback
- JavaScript 模块导入的一个小麻烦
- [导入]JavaScript 弹出一个可移动的框
- 一个简单的javascript模块间事件通信范例
- 设计一个JavaScript框架需要编写哪些模块
- 如何写一个JavaScript模块
- [导入]一个离线ADO数据管理模块的实现
- [导入]JavaScript窗口功能指南之检查一个窗口是否存在
- 导入自定义模块方式及遇到的一个问题
- 关于在python中, 在同一个project中的同一个目录里面, 导入模块的问题
- 在一个idea工作环境中导入多个maven项目模块
- python从入门到实践 9-11 导入Admin 类 : 以为完成练习9-8而做的工作为基础, 将User 、 Privileges 和Admin 类存储在一个模块中, 再创建一个文件, 在其中创建
- python从入门到实践 9-10 导入Restaurant 类 : 将最新的Restaurant 类存储在一个模块中。 在另一个文件中, 导
- 导入模块时前面带一个点是什么意思
- Discuz! X3.2论坛中的模板 论坛模块下某一个版块的 模板导入方法
- 创建一个模块calculator.py,完成任意两个数的加(add)、减(sub)、乘(mult)、除(div)运算;导入该模块,分别调用其中的函数,完成如下操作: 1、25+56 2、86-68 3
- PyCharm如何在某一目录内的.py文件中导入在该目录写的一个模块?
- [导入]一个JavaScript方法的演变
- Python3基础 创建一个模块 导入并调用其中的函数 主代码与模块代码在同一文件夹下
- PyCharm导入同在一个文件夹的另一个py文件时,模块下方有红色波浪线的解决办法
- 动态导入模块,加载预训练模型,nn.Sequential函数里面必须是a Module subclass,不能是一个列表或者是其他的迭代器、生成器,虽然这里面包含了Module的子类