Loading...
在目前 monorep 中,各个包的依赖关系如下:
@antv/g 核心包,依赖注入使用 mana-syringe@antv/g-canvas/svg/webgl 渲染器包,依赖 @antv/g,内部注册了一系列插件:
@antv/g-canvas 依赖 @antv/g-plugin-canvas-renderer 等四个插件@antv/g-plugin-xxx 插件包,依赖 @antv/g,部分插件也会依赖其他插件特别的,g-webgl 使用 wasm 转译 GLSL 到 WGSL。
在构建时我们选择 father 构建 CJS 与 ESM,webpack4 构建 UMD。
构建时使用 father:
// 根目录 package.json"build": "father build",
在 fatherrc 中选择 babel 模式:
{cjs: 'babel',esm: 'babel',umd: false,nodeResolveOpts: {mainFields: ['module', 'browser', 'main'],},pkgs: ['g-math',// 省略其他构建包]}
运行后在每个子包下 /es 和 /lib 下就会生成对应源文件的 ESM 和 CJS 文件了。
使用 webpack4 构建 UMD,以 g-canvas 为例,在配置文件中排除掉:
module.exports = {...common,externals: {'@antv/g': {commonjs: '@antv/g',commonjs2: '@antv/g',amd: '@antv/g',root: 'G', // 运行时通过 window.G 获取},'mana-syringe': {commonjs: 'mana-syringe',commonjs2: 'mana-syringe',amd: 'mana-syringe',root: ['G', 'ManaSyringe'], // 运行时通过 window.G.ManaSyringe 获取},},output: {library: ['G', 'Canvas2D'], // 暴露 window.G.Canvas2DlibraryTarget: 'umd',filename: 'index.umd.min.js',},};
特别的 g-webgl 需要使用 WASM,因此多加一个插件:
plugins: [new WasmPackPlugin({crateDirectory: path.join(__dirname, 'rust'), // crate 放在 /rust 下forceMode: 'production',}),],