首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套命名空间与ES模块

嵌套命名空间与ES模块
EN

Stack Overflow用户
提问于 2020-07-22 20:18:22
回答 2查看 428关注 0票数 1

使用传统的JavaScript名称空间技术,我能够创建一个嵌套的逻辑分组,甚至在多个文件上。我应该如何用ES模块别名导入来替换它。

考虑这样的情况,我希望我的所有代码都位于CompanyName命名空间中,然后按产品分组,在产品中,我可能有一组共享函数,这些函数可以按主题分组(在许多语言中非常常见,如Java、C#等)。F.e.

代码语言:javascript
复制
CompanyName = {
    ProductName1: {
        Shared: {
            Database: {
                enumerateDatabases: function() {
                    ....
                }
                ...
            }
        }
    },
    ProductName2: {
        ....
    }
}

如果我正确理解ES模块,允许我使用一个别名来创建名称空间f.e。

代码语言:javascript
复制
import * as CompanyName from ...

像CompanyName这样的别名当然不够具体。类似的化名

代码语言:javascript
复制
import * as CompanyNameProductName1SharedDatabase from...

几乎是不可读的,并且是一个简单的别名,如

代码语言:javascript
复制
import * as Database from...

可能很快就会变得模棱两可,我不得不用类似的别名

代码语言:javascript
复制
import * as MyDatabase from...
import * as YourDatabase from...

这是否意味着没有像上面所示的分组代码的方法?还是两者兼而有之?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-22 20:45:56

如果正确理解ES模块,

允许我使用一个别名来创建命名空间

是的,别名必须是简单的标识符,没有嵌套。注意,与CompanynameProductname1SharedDatabase相比,Companyname.Productname1.Shared.Database并没有那么糟糕--即使在其他语言中,您也不会每次都写完整的包名,但是给它一个合理的别名。甚至可以用CPSDb这样的缩写。

import * as Database from...这样的简单别名可能很快变得模棱两可

不,不应该。Product2不太可能需要导入Product1 1的数据库。只有在同一个模块中确实有多个数据库时,才需要消除歧义。

只需为当前模块选择合理的别名即可。这可能意味着根据导入位置使用不同的别名,这很好:

代码语言:javascript
复制
// src/productname1/shared/index.js
import * as Database from './database.js';
代码语言:javascript
复制
// src/backend/init.js
import * as Productname1SharedDatabase from '/productname1/shared/database.js';

还请注意,在JS中使用命名空间导入是非常少见的,它们只在您从一个模块导入许多绑定时使用,并且需要从其他模块中消除它们的歧义。你终究会明白的

代码语言:javascript
复制
import { enumerateDatabase } from './database.js';

更常见的情况是,数据库模块中已经有了一个enumerateDatabase函数。注意,在JavaScript中没有隐式绑定:如果您忘记了标识符来自何处,您将始终在当前文件中找到它的(导入)声明,这样您就可以轻松地查找它。此外,IDE将通过显示名称解析到哪里来帮助您。

票数 2
EN

Stack Overflow用户

发布于 2020-07-22 20:27:59

你会这样做的

代码语言:javascript
复制
const enumerateDatabases = function() {
        ....
    }
export {
    enumerateDatabases
}

代码语言:javascript
复制
import {enumerateDatabases as aliasForEnumDbs} from 'xx.js';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63042535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档