You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vite React项目中引入Webpack构建的UMD库?

解决Vite React项目中引入Webpack构建的UMD库报错问题

问题背景

用Webpack构建的UMD格式库,通过script标签引入可正常调用全局方法,但在Vite React项目中用import "webpack-numbers";引入时,出现Uncaught TypeError: n is undefined错误。

解决方案

1. 正确导入库的导出内容

先确认库源码的导出方式,比如src/index.js如果是这样导出:

export function wordToNum(word) {
  // 业务逻辑
}

在Vite项目中改用命名导入或默认导入:

// 命名导入
import { wordToNum } from 'webpack-numbers';

// 调用示例
console.log(wordToNum('Five'));

// 若库用默认导出,就用默认导入
import webpackNumbers from 'webpack-numbers';
webpackNumbers.wordToNum('Five');

2. 调整Webpack配置,输出ES模块格式

修改库的Webpack配置,新增ES模块构建产物,让Vite能原生解析:

const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: [
    // 保留原UMD版本供script标签使用
    {
      path: path.resolve(__dirname, 'dist'),
      filename: 'webpack-numbers.js',
      globalObject: 'this',
      library: {
        name: 'webpackNumbers',
        type: 'umd',
      },
    },
    // 新增ES模块版本
    {
      path: path.resolve(__dirname, 'dist'),
      filename: 'webpack-numbers.esm.js',
      library: {
        type: 'module',
      },
    }
  ],
  experiments: {
    outputModule: true,
  },
};

然后在库的package.json中指定module字段:

{
  "module": "dist/webpack-numbers.esm.js",
  "main": "dist/webpack-numbers.js"
}

Vite会优先读取module字段对应的ES模块文件,避免UMD与ES模块的兼容冲突。

3. 直接使用全局变量(不推荐)

如果暂时不想修改库的构建配置,可在导入后直接调用全局变量:

import 'webpack-numbers';

// 访问全局对象上的webpackNumbers
const result = window.webpackNumbers.wordToNum('Five');

这种方式依赖全局变量,不符合ES模块规范,仅作为临时方案。

内容的提问来源于stack exchange,提问作者Bartlomiej Lewandowski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:46:13