从客户端构建后无法访问 webpack 中定义的变量

Cannot access variables defined in webpack after build from client

这可能是一个新手问题,但是在研究了平台上的其他问题并深入研究了 Webpack 文档之后,我看到人们尝试过很多方法。我真的没有看到任何东西可以用来解决我的问题。

我希望通过捆绑器 (Webpack) 使用 Chart.js。创建此文件时,我将实例存储在一个变量中。请参阅下面的代码片段以进行跟进。

src/index.js

import { Chart, registerables } from 'chart.js';
Chart.register(...registerables);

const myFirstChart = new Chart("test", {
    type: 'bar',
    data: {
        labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 3, 5, 2, 3],
        }]
    }
})

webpack.config.js

module.exports = {
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'index.js',
    }
}

index.ejs

<script src="../dist/index.js"></script>

图表在使用 webpack 命令构建后加载没有问题。我面临的问题是我假设我可以在我的控制台中访问该图表的实例,因为我希望在图表初始化后对数据进行一些更新。

我希望能够像 Chart.js 是 CDN 或直接加载时那样访问变量 myFirstChart

我在 Chart.js 或 Webpack 5 的文档中可能忽略了这一点吗?

webpack的重点是处理模块,模块的重点是不污染全局名称space。如果另一个 JS 代码文件需要访问变量,export 它在创建它的地方,import 它在另一个文件中。

模块中定义的任何变量都只是模块作用域;人们普遍认为根本不使用全局名称space 是不好的做法。

如果您绝对需要它(如果是这种情况,您很可能做错了),请在您的 index.js 文件中添加 window.myFirstChart = myFirstChart;

import { Chart, registerables } from 'chart.js';
Chart.register(...registerables);

const myFirstChart = new Chart("test", {
    type: 'bar',
    data: {
        labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
        datasets: [{
            label: '# of Votes',
            data: [12, 19, 3, 5, 2, 3],
        }]
    }
})
window.myFirstChart = myFirstChart;

任何你需要全局可用的变量,你明确需要通过将它附加到全局 window 对象来发布(这是浏览器查找它们的地方,除非它们被定义在更本地的地方您正在尝试访问它)。