我有一个d3.custom.build.js这样的文件(简化):
import { range } from 'd3-array';
import { select, selectAll, event } from 'd3-selection';
import { transition } from 'd3-transition';
export default {
range,
select,
selectAll,
event,
transition
};
Run Code Online (Sandbox Code Playgroud)
和rollup.config.js这样的:
import nodeResolve from 'rollup-plugin-node-resolve';
export default {
entry: './js/vendor/d3-custom-build.js',
dest: './js/vendor/d3-custom-built.js',
format: 'iife',
globals: {
d3: 'd3'
},
moduleId: 'd3',
moduleName: 'd3',
plugins: [nodeResolve({ jsnext: true })]
};
Run Code Online (Sandbox Code Playgroud)
我想导出一个名为'd3'的普通旧浏览器.我正在从简单的npm脚本调用汇总.好消息是几乎所有东西都在输出文件中工作,除了一件事:d3.event在浏览器中总是为空.不,这不是在页面上被劫持的事件的问题.当我将标准的完整d3 4.0库交换到脚本标记时,一切正常.这绝对是一个构建问题.
该D3文档警告说,捆绑event是棘手:
如果您使用Babel,Webpack或其他ES6到ES5捆绑包,请注意d3.event的值在事件期间会发生变化!导入d3.event必须是实时绑定,因此您可能需要将捆绑程序配置为从D3的ES6模块而不是从生成的UMD包导入; 并非所有捆绑商都观察到jsnext:main.还要注意与window.event全局的冲突.
设置似乎nodeResolve({ jsnext: true })不够.如何在捆绑中获得实时绑定?任何指导非常感谢.