单文件库使用 TypeScript 和 ES6 Modules 的可行性
Feasibility of using TypeScript and ES6 Modules for a single-file library
目前,我们的组织正在开发一个 JavaScript 库以用于我们的一个产品。目前,这是通过以下步骤开发的:
- 使用 TypeScript 和内部模块创建命名空间 classes(一个命名空间用于我们的内部 classes,一个命名空间用于 public API),使用
/// <reference>
标签来确定依赖关系
- 针对 ES5,从
_references.ts
(一个两步过程,用于内部和 public API 生成已编译的 JavaScript(带有 --out
标志) s), 将所有内容连接并缩小到一个 js 文件中
- 使用为 public API
生成的 .d.ts
文件自动生成文档
我们一直在考虑更新我们的代码库,我们正在关注 TypeScript 功能的最新更新,具体来说,转向使用单个 tsconfig.json
和 ES6 模块的使用。我承认我自己没有最全面的知识,但我遇到过以下问题:
- ES6 模块似乎依赖于保留目录结构,因此这可能意味着我们失去了命名空间。我不确定我们以后如何能够在 ES5 平台上访问 classes。
- 我已经尝试研究
browserify
的使用,看看如何将所有东西捆绑在一起;但是,它需要程序的入口点,我们的库实际上没有入口点,因为它通常只是一系列 class 声明,具有与我们组织的产品交互的功能。
我是不是漏掉了一些基础知识?使用 ES6 classes 来实现我们想要完成的事情是否可行,如果可行,建议的工作流程是什么(在工具方面?)或者我们是否需要继续使用命名空间 class 是这种要求的输出吗?
ES6 modules seem to be dependent on preserving a directory structure so this might mean we lose our namespaces
一般情况下不正确,但这就是您在使用 typescript 时使用它们的方式 "within a project"。
I'm not sure how we will later be able to access classes on an ES5 platform
使用像 --module commonjs
这样的模块模式编译成 ES5。使用 commonjs
模块(又名 NPM 模块)是一种成熟的模式,主要工作流工具都支持它,例如 webpack
、jspm
、browserify
.
which our library does not really have as it is generally just a series of class declarations with functionality to interact with our organization's products.
从中创建一个 index.ts
和 export
库 public api。这个文件就是你的入口点。
目前,我们的组织正在开发一个 JavaScript 库以用于我们的一个产品。目前,这是通过以下步骤开发的:
- 使用 TypeScript 和内部模块创建命名空间 classes(一个命名空间用于我们的内部 classes,一个命名空间用于 public API),使用
/// <reference>
标签来确定依赖关系 - 针对 ES5,从
_references.ts
(一个两步过程,用于内部和 public API 生成已编译的 JavaScript(带有--out
标志) s), 将所有内容连接并缩小到一个 js 文件中 - 使用为 public API 生成的
.d.ts
文件自动生成文档
我们一直在考虑更新我们的代码库,我们正在关注 TypeScript 功能的最新更新,具体来说,转向使用单个 tsconfig.json
和 ES6 模块的使用。我承认我自己没有最全面的知识,但我遇到过以下问题:
- ES6 模块似乎依赖于保留目录结构,因此这可能意味着我们失去了命名空间。我不确定我们以后如何能够在 ES5 平台上访问 classes。
- 我已经尝试研究
browserify
的使用,看看如何将所有东西捆绑在一起;但是,它需要程序的入口点,我们的库实际上没有入口点,因为它通常只是一系列 class 声明,具有与我们组织的产品交互的功能。
我是不是漏掉了一些基础知识?使用 ES6 classes 来实现我们想要完成的事情是否可行,如果可行,建议的工作流程是什么(在工具方面?)或者我们是否需要继续使用命名空间 class 是这种要求的输出吗?
ES6 modules seem to be dependent on preserving a directory structure so this might mean we lose our namespaces
一般情况下不正确,但这就是您在使用 typescript 时使用它们的方式 "within a project"。
I'm not sure how we will later be able to access classes on an ES5 platform
使用像 --module commonjs
这样的模块模式编译成 ES5。使用 commonjs
模块(又名 NPM 模块)是一种成熟的模式,主要工作流工具都支持它,例如 webpack
、jspm
、browserify
.
which our library does not really have as it is generally just a series of class declarations with functionality to interact with our organization's products.
从中创建一个 index.ts
和 export
库 public api。这个文件就是你的入口点。