首页 > 解决方案 > 如何在无需对文件进行大量更改的情况下将 JavaScript 对象的所有函数导出为模块?

问题描述

我有这个原始的非模块化 JavaScript 文件(luxon.js)。

然后我有一个 JavaScript 文件(实际上是 TypeScript),我像这样导入它:

import * as luxon from './luxon.js';

所以不,我需要把 luxon.js 变成一个模块。我通过删除来做到这一点

var luxon = (function (exports) { 

}({}));

然后,我在最后添加以下行。

export { DateTime, Duration, Interval, Info, Zone, FixedOffsetZone, IANAZone, InvalidZone, LocalZone, Settings };

这很好用(在 google-chrome 中)
但假设这是更多的功能。
我该怎么做

exports exports;

或者

 export * from exports;

所以我不必手动枚举对象“exports”中已经存在的所有函数?

注意:
对象exports存在,并且所有要导出的功能已经分配给它自己。

var exports = {};

exports.DateTime = DateTime;
exports.Duration = Duration;
exports.Interval = Interval;
exports.Info = Info;
exports.Zone = Zone;
exports.FixedOffsetZone = FixedOffsetZone;
exports.IANAZone = IANAZone;
exports.InvalidZone = InvalidZone;
exports.LocalZone = LocalZone;
exports.Settings = Settings;

另请注意,请不要向我提供 luxon 已经模块化的 npm 存储库的链接。
我对 luxon 不感兴趣,我对如何快速模块化还不是模块的东西感兴趣(只需最少的努力)。

标签: javascriptes6-modules

解决方案


我有点设法做到了。我会建议您使用ES6 版本的库来满足您的目的。如果您仍想使用浏览器全局版本作为模块,请按照以下步骤操作。

luxon.js 的变化:

改变这个

var luxon = (function (exports) {
  'use strict';

这样

export default (function (exports) {
'use strict'

索引.html

<script type="module" src="index.js"></script>

index.js

import luxon from "./luxon.js";
console.log(luxon.DateTime.local().setZone('America/New_York').minus({ weeks: 1 }).endOf('day').toISO());

推荐阅读