Cesium 与 Webpack 打包环境 buildModuleUrl.js 警告 require function 问题的解决

1,319 阅读1分钟

我仍然不建议将 Cesium 作为依赖打包进项目,而是使用 CDN 的方式,加速打包且加速首屏时间。

有时候使用 Webpack 技术来打包 Cesium 有关的项目时会有 require 函数警告的问题:

 WARNING  Compiled with 3 warnings                                                                                                             
4:26:41 PM
 warning  in ./node_modules/cesium/Source/Core/buildModuleUrl.js
114:14-21 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
 warning  in ./node_modules/cesium/Source/Core/buildModuleUrl.js
52:12-19 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted
 warning  in ./node_modules/cesium/Source/Core/buildModuleUrl.js
80:25-32 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

主要就是这个警告: Critical dependency: require function is used in a way in which dependencies cannot be statically extracted,发生在 ./node_modules/cesium/Source/Core/buildModuleUrl.js 模块中。

如果能直接修改 Webpack 配置文件,那么在配置对象中加入如下两条配置:

// webpack.config.js

export default {
  /* ... */
  module: {
    unknownContextRegExp = /^('|')\.\/.*?\1$/
    unknownContextCritical = false
  },
  amd: {
    toUrlUndefined: true
  }
}

如果支持 chainWebpack 接口,譬如 umi.js 之类的框架:

// .umirc.ts

import { defineConfig } from 'umi'

export default defineConfig({
  /* ... */
  chainWebpack(memo, {env, webpack, createCSSRule}) {
    memo.module.set('unknownContextRegExp', /^('|')\.\/.*?\1$/);
    memo.module.set('unknownContextCritical', false);
    memo.amd({
      toUrlUndefined: true
    })
  }
})