如何将 google 地图异步回调与 knockout 和 webpack 一起使用?

How do I use google maps async callback with knockout and webpack?

大家好。我正在尝试将 google maps api 与 knockout 和 webpack 集成。我已经在 html 中直接设置了对 google 地图 api 的请求。该脚本包含一个回调函数,我想在加载完成后执行该回调函数。但是当我 运行 服务器出现错误 "initMap is not a function." 我认为这是因为该函数位于一个包中,但我不确定。有人知道为什么会这样吗? 这是我捆绑的 js:

import ko from 'knockout';


function initMap() {
  console.log('hey')
}


var MyApp = () => {
}


ko.applyBindings(new MyApp())

继承人 html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Neighborhood Map</title>
    <link rel="stylesheet" type="text/css" href="./css/main.css"
  </head>
  <body>
    <div id="map">
    </div>


    <script type="text/javascript" src="build/bundle.js"></script>
    <script defer
      src="http://maps.google.com/maps/api/js?key=[KEY]&v=3&callback=initMap">
    </script>

  </body>
</html>

这是我的 webpack 配置文件:

const path = require('path');

module.exports = {
    devtool: 'sourcemap',
      entry: './app.js',
      output: {
        path: path.resolve('build', ''),
        filename: 'bundle.js'
      },
      module: {
      noParse: /node_modules\/knockout\/build\/output\/*.js/,
      loaders: [
        {
          test: /\.html$/, loader: 'html-loader'
        },
          {
            test: /\.js?$/,
            exclude: /(node_modules)/,
            loader: 'babel-loader',
            query: {
                presets: ['es2015']
            }
          },
        ]
    }
};

仅供参考,我已经尝试将 initMap 函数放在 MyApp 变量中,并将其视为全局函数。这两个选项都不起作用。您认为我应该请求 js 文件中的脚本而不是 html 中的脚本吗?如果是这样,最好的方法是什么?

经过几天的网上搜索,我终于在这里找到了答案:

我使用的答案实际上是第三个接受的答案。它涉及将函数设置为 window 的 属性 并导出函数

window.initMap = initMap
export function initMap() { function stuff }

如果此答案对您有帮助,请访问该网站并为该答案点赞,使其成为被接受的答案。