Module 为单个文件库使用TypeScript和ES6模块的可行性

Module 为单个文件库使用TypeScript和ES6模块的可行性,module,typescript,ecmascript-6,Module,Typescript,Ecmascript 6,目前,我们的组织正在开发一个JavaScript库,用于我们的一个产品。目前,这是通过以下步骤开发的: 使用TypeScript和内部模块创建命名空间类(一个命名空间用于我们的内部类,一个命名空间用于公共API),使用//标记确定依赖项 针对ES5,从\u references.ts(内部和公共API的两步过程)生成编译的JavaScript(带有--out标志),将所有内容连接并缩小为单个js文件 使用为公共API生成的.d.ts文件自动生成文档 我们一直在关注代码库的更新,我们也在关注T

目前,我们的组织正在开发一个JavaScript库,用于我们的一个产品。目前,这是通过以下步骤开发的:

  • 使用TypeScript和内部模块创建命名空间类(一个命名空间用于我们的内部类,一个命名空间用于公共API),使用
    //
    标记确定依赖项
  • 针对ES5,从
    \u references.ts
    (内部和公共API的两步过程)生成编译的JavaScript(带有
    --out
    标志),将所有内容连接并缩小为单个js文件
  • 使用为公共API生成的
    .d.ts
    文件自动生成文档
我们一直在关注代码库的更新,我们也在关注TypeScript功能的最新更新,特别是使用单个
tsconfig.json
,以及ES6模块的使用。我承认我自己没有最全面的知识,但我遇到了以下问题:

  • ES6模块似乎依赖于保留目录结构,因此这可能意味着我们失去了名称空间。我不确定我们以后如何才能访问ES5平台上的课程
  • 我试着研究
    browserify
    的用法,看看如何将所有东西捆绑在一起;然而,它需要一个程序入口点,我们的库并没有这个入口点,因为它通常只是一系列具有与我们组织的产品交互功能的类声明
我是不是缺少一些基础知识?使用ES6类来完成我们试图完成的任务是否可行?如果可行,建议的工作流(在工具方面)是什么?或者对于这种需要的输出,我们是否需要使用名称空间的类

ES6模块似乎依赖于保留目录结构,因此这可能意味着我们将丢失名称空间

一般来说不是这样,但这是在使用typescript时“在项目中”使用它们的方式

我不确定我们以后如何才能访问ES5平台上的课程

使用模块模式(如
--modulecommonjs
)编译到ES5。使用
commonjs
模块(又称NPM模块)是一种成熟的模式,主要的工作流工具支持它,如
webpack
jspm
browserify

我们的库实际上没有,因为它通常只是一系列类声明,具有与我们组织的产品交互的功能


创建一个
index.ts
export
库公共api的内容。这个文件就是您的入口点。

我不同意您对“ES6模块似乎依赖于保留目录结构”的回答。ES6模块不会对如何解析模块标识符做出任何假设。这一切都取决于实际的模块加载器。目前,ES6模块通常被传输到CommonJS,CommonJS确实使用文件路径来识别模块(但同样,这与ES6模块无关)。谢谢。我已将该部分更新为特定于typescript;)