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

Webpack 5配置求助:将指定JS模块暴露至浏览器全局作用域

解决Webpack打包后全局变量无法访问的问题

问题背景

现有项目目录结构:

temp
  |- package.json
  |- package-lock.json
  |- webpack.config.js
  |- /src
    |- /components
        |- button1.js
        |- button2.js
    |- id_selectors.js
    |- index.js
  |- /templates
    |- index.js
  |- /dist
    |- final.js
  |- /node_modules

页面中通过onclick="btn2Clicked()"调用函数时触发ReferenceError错误,原因是Webpack默认将模块变量封装在局部作用域,无法直接在浏览器全局访问。要求不修改id_selectors.js、button1.js、button2.js原文件,仅通过调整webpack.config.js配置和修改src/index.js,将这三个文件的变量暴露至window全局作用域。

解决方案

1. 更新webpack.config.js配置

利用Webpack 5的output.library配置项,将打包后的模块暴露为全局对象:

module.exports = {
    mode: 'development',
    entry: './src/index.js',
    output: {
        filename: 'final.js',
        path: __dirname + '/dist',
        // 配置library,将模块内容挂载到window对象
        library: {
            name: 'MyApp', // 自定义全局对象名称,可按需修改
            type: 'window' // 指定暴露到window全局作用域
        }
    },
};

2. 修改src/index.js入口文件

在入口文件中导入目标模块,并将需要全局访问的变量手动挂载到window:

// 导入所有目标模块
import './id_selectors.js';
import './components/button1.js';
import './components/button2.js';

// 将变量挂载到window,使其成为全局可访问对象
window.btn1 = btn1;
window.btn2Clicked = btn2Clicked;

验证步骤

执行Webpack重新打包:

npx webpack

刷新页面后,点击Button 2可正常触发btn2Clicked()函数打印日志,Button 1的点击事件也能正常工作,同时btn1变量可在浏览器控制台直接访问。

内容的提问来源于stack exchange,提问作者P. Roy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:27:19