使用传统的JavaScript名称空间技术,我能够创建一个嵌套的逻辑分组,甚至在多个文件上。我应该如何用ES模块别名导入来替换它。
考虑这样的情况,我希望我的所有代码都位于CompanyName命名空间中,然后按产品分组,在产品中,我可能有一组共享函数,这些函数可以按主题分组(在许多语言中非常常见,如Java、C#等)。F.e.
CompanyName = {
ProductName1: {
Shared: {
Database: {
enumerateDatabases: function() {
....
}
...
}
}
},
ProductName2: {
....
}
}如果我正确理解ES模块,允许我使用一个别名来创建名称空间f.e。
import * as CompanyName from ...像CompanyName这样的别名当然不够具体。类似的化名
import * as CompanyNameProductName1SharedDatabase from...几乎是不可读的,并且是一个简单的别名,如
import * as Database from...可能很快就会变得模棱两可,我不得不用类似的别名
import * as MyDatabase from...
import * as YourDatabase from...这是否意味着没有像上面所示的分组代码的方法?还是两者兼而有之?
发布于 2020-07-22 20:45:56
如果正确理解ES模块,
允许我使用一个别名来创建命名空间
是的,别名必须是简单的标识符,没有嵌套。注意,与CompanynameProductname1SharedDatabase相比,Companyname.Productname1.Shared.Database并没有那么糟糕--即使在其他语言中,您也不会每次都写完整的包名,但是给它一个合理的别名。甚至可以用CPSDb这样的缩写。
像
import * as Database from...这样的简单别名可能很快变得模棱两可
不,不应该。Product2不太可能需要导入Product1 1的数据库。只有在同一个模块中确实有多个数据库时,才需要消除歧义。
只需为当前模块选择合理的别名即可。这可能意味着根据导入位置使用不同的别名,这很好:
// src/productname1/shared/index.js
import * as Database from './database.js';// src/backend/init.js
import * as Productname1SharedDatabase from '/productname1/shared/database.js';还请注意,在JS中使用命名空间导入是非常少见的,它们只在您从一个模块导入许多绑定时使用,并且需要从其他模块中消除它们的歧义。你终究会明白的
import { enumerateDatabase } from './database.js';更常见的情况是,数据库模块中已经有了一个enumerateDatabase函数。注意,在JavaScript中没有隐式绑定:如果您忘记了标识符来自何处,您将始终在当前文件中找到它的(导入)声明,这样您就可以轻松地查找它。此外,IDE将通过显示名称解析到哪里来帮助您。
发布于 2020-07-22 20:27:59
你会这样做的
const enumerateDatabases = function() {
....
}
export {
enumerateDatabases
}和
import {enumerateDatabases as aliasForEnumDbs} from 'xx.js';https://stackoverflow.com/questions/63042535
复制相似问题