快速而肮脏的方法是从 CDN 而不是 Webpack 加载 gmaps4rails 代码(和下划线)。因为你只是使用<script>
标签来构建地图,Webpack 无法帮助你。
如果您仍然想尝试使用 Webpack,请继续阅读。
了解 Webpack 将自身与全局范围隔离;与 Sprockets 不同,您在 Webpack 中导入的对象或值将无法在<script>
标签或浏览器控制台。如果您想要这种行为,则必须手动配置它。
查看 gmaps4rails 脚本,它似乎不具有模块感知能力,并假设它是在全局范围内评估的(其中下划线可用)。换句话说,它对模块不友好。但我们可以让它发挥得很好。
我们需要告诉 Webpack 进行处理this
在 gmaps4rails 脚本中为window
,即全局范围,并“提供”下划线(或几乎可互换的 lodash,如下),因为它假设_
lib 在其范围内可用。
在你的外壳中:
$ yarn add imports-loader lodash
In config/webpack/environment.js
:
const { environment } = require('@rails/webpacker')
const webpack = require('webpack')
environment.loaders.append('gmap4rails', {
test: /gmaps_google/,
use: [
{
loader: 'imports-loader',
options: 'this=>window',
},
],
})
environment.plugins.append(
'lodash',
new webpack.ProvidePlugin({
_: 'lodash',
})
)
module.exports = environment
假设您已按照以下正确设置了您的谷歌脚本gmaps4rails 自述文件 https://github.com/apneadiving/Google-Maps-for-Rails#requirements,这应该可以解决问题。
我创建了一个演示应用程序,其中包含一个工作示例example/gmap4rails
分支(带上您自己的 Google 地图 API 密钥):https://github.com/rossta/rails6-webpacker-demo/tree/example/gmaps4rails https://github.com/rossta/rails6-webpacker-demo/tree/example/gmaps4rails