如何仅通过几个插件加载XRegExp?

时间:2018-06-20 14:08:09

标签: javascript xregexp

我已经搜索了XRegExp的web site和GitHub readme。那里唯一的例子是加载xregexp-all.js,这正是我不想做的,因为它加载了所有插件。通过搜索SO,我发现了这样的示例:

<script src="xregexp.js"></script>
<script src="addons/unicode-base.js"></script>
<script src="addons/unicode-categories.js"></script>

但是尝试以上操作只会导致ReferenceError: exports is not defined

如何仅将XRegExp的某些加载项加载?

1 个答案:

答案 0 :(得分:1)

您使用script显示的用法可能已经在XRegExp的早期版本中使用,但现在已经过时了,新用法似乎未在任何地方记录。

您可以使用xregexp-all.js标记加载script,因为它在文件的开头有一个UMD wrapper,可以使用此标记。但是,如果您查看XRegExp附带的已编译插件文件,则每个插件中都会显示以下代码:

'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

exports.default = function (XRegExp) {
// ...
};

这告诉您两件事。一是插件是模块,周期。它们没有UMD包装器,因此无法使用script加载它们。其次,附加组件导出一件事:函数。顾名思义,您需要将XRegExp库本身传递给它,以便插件可以自行安装。在存储库中的src/index.js source中找到了进一步的线索。它包含:

import XRegExp from './xregexp';

import build from './addons/build';
import matchRecursive from './addons/matchrecursive';
import unicodeBase from './addons/unicode-base';
import unicodeBlocks from './addons/unicode-blocks';
import unicodeCategories from './addons/unicode-categories';
import unicodeProperties from './addons/unicode-properties';
import unicodeScripts from './addons/unicode-scripts';

build(XRegExp);
matchRecursive(XRegExp);
unicodeBase(XRegExp);
unicodeBlocks(XRegExp);
unicodeCategories(XRegExp);
unicodeProperties(XRegExp);
unicodeScripts(XRegExp);

export default XRegExp;

使用npm安装XRegExp之后,这就是我在我的项目(必须在ES5引擎上按原样运行)中使用的项目,在该项目中,我仅想加载带有某些Unicode插件的XRegExp,而没有其他功能:< / p>

var XRegExp = require("xregexp/lib/xregexp");
var base = require("xregexp/lib/addons/unicode-base");
var blocks = require("xregexp/lib/addons/unicode-blocks");
var categories = require("xregexp/lib/addons/unicode-categories");

base(XRegExp);
blocks(XRegExp);
categories(XRegExp);

此代码可在Node中工作,并且Webpack也会对其进行适当处理以在浏览器中使用。