Я сейчас пишу d3 плагин . Тем не менее, я хочу назвать этот плагин как свойство глобального d3, как в исходном примере: d3.foo()
Но когда я это сделаю, мои конфигурации для сворачивания приведут к cla sh ссылок d3.
Вот один минимальный пример (только с одним файлом) для иллюстрации: я скачал оригинальный пример плагина d3 и немного изменил исходный файл foo. js:
//.src/foo.js
import * as d3 from "d3";
export default function() {
return d3.select("body").append("div").text(42);
};
Так вот мой плагин , Он использует функции d3 (d3.select()
), поэтому d3 импортируется сверху.
Мой индекс. js выглядит так:
export {default as foo} from "./src/foo";
Поэтому я экспортирую функцию foo () .
Мой rollup.config. js выглядит следующим образом:
//rollup.config.js
import babel from "rollup-plugin-babel";
var globals = {
"d3": "d3",
};
export default {
entry: "index.js",
dest: "build/d3-foo.js",
format: "umd",
moduleName: "d3",
external: Object.keys(globals),
globals: globals,
plugins: [
babel({
exclude: "node_modules/**"})
]
};
Я установил moduleName равным "d3", так как я хочу вызвать свой плагин как d3.foo (). Я также установил глобальные и внешние значения на «d3», поскольку не хочу, чтобы модули d3 связывались с помощью свертки.
Для вызова своего плагина d3 я использую следующий код html:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<script src="https://d3js.org/d3.v5.js"></script>
<script src="./build/d3-foo.js"></script>
</head>
<body>
<script>
d3.foo();
</script>
</body>
</html>
Но это не работает, поскольку пространство имен d3 ссылается на библиотеку d3, которая не содержит функцию с именем d3.foo ().
Сгенерированный пакет выглядит следующим образом:
// build/d3-foo.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3')) :
typeof define === 'function' && define.amd ? define(['exports', 'd3'], factory) :
(factory((global.d3 = {}),global.d3));
}(this, (function (exports,d3) { 'use strict';
function foo () {
return d3.select("body").append("div").text(42);
}
exports.foo = foo;
Object.defineProperty(exports, '__esModule', { value: true });
})));
Если вместо этого я вызываю moduleName в rollup.config. js любое другое имя (например, d4) Я могу вызвать плагин с помощью d4.foo (), и он работает. Как нужно настроить файл конфигурации накопительного пакета, чтобы он мог называть мой плагин d3.foo, как это предложил Майк Босток в своем блоге?
Любая помощь будет принята с благодарностью!