gpt4 book ai didi

javascript - 使用 Webpack 将 Vue 暴露给全局

转载 作者:行者123 更新时间:2023-12-04 11:41:06 25 4
gpt4 key购买 nike

我正在使用已部分迁移以使用 Webpacker 和 Vue 的旧版 Rails 应用程序。我们还有一个通过 CDN 加载的遗留脚本。该脚本也需要使用 Vue,但我们宁愿不将 Vue 捆绑到其中,而只使用旧版 Rails 应用程序中已有的 Vue。

我已经关注了这个问题 How to expose Vue as global object我到了这一点,使用expose-loader,将Vue对象暴露在Vue.default。 .本质上,暴露的“Vue”对象实际上是一个 Module真正的 Vue 对象嵌套在 Vue.default 中.

通过遵循我能找到的所有文档和文章,我达到了这一点。这些是我能找到的最相关的:https://bibwild.wordpress.com/2019/08/01/dealing-with-legacy-and-externally-loaded-code-in-webpacker/

这似乎不太理想,我想知道是否有直接公开 Vue 的“更正确”的方式,即不嵌套在模块默认值中。

我试过的

我从头开始创建了一个新的 Rails 6 应用程序。通过以下方式添加 JS 依赖项后:

yarn install
yarn add vue
yarn add -D expose-loader
yarn add -D webpack-dev-serer
rails webpacker:install

我将expose-loader 配置添加到 config/webpack/development.js
environment.loaders.append('expose', {
test: require.resolve('vue'),
use: [{
loader: 'expose-loader',
options: 'Vue'
}]
})

然后,我搭建了一个页面并将其设为根路由。

然后在 app/javascript/packs/application.js创建了一个入口JS文件

import Vue from 'expose-loader?Vue!vue'
console.log({ pack: Vue })

在应用程序布局中, javascript_pack_tag 'application' 下, 我有:

<script>
try {
console.log({ layout: Vue })
} catch (error) {
console.warn('Global Vue not found')
}
</script>

现在在浏览器控制台中我得到

{ pack: ƒ Vue(options) }
{ layout: Module
default: ƒ Vue(options) }

我还在 config/webpack/development.js 中尝试了不同的配置对于 expose-loader , 如:

  test: require.resolve('vue/dist/vue.esm.js')
// or
test: require.resolve('vue/dist/vue.esm.js').default
// or
test: require.resolve('expose-loader?Vue!vue')
// and different permutations of that.

我尝试的另一种方法是直接将 Vue 从我的 application.js 包文件中插入 window 对象中。这行得通,但似乎也错了。有没有更好的办法?

问题

如何公开 Webpacker 托管的 Vue 对象,以便任何非 Webpacker 托管的脚本都可以看到它?即在 window 上提供它目的。

最佳答案

我已经设法在 webpack 中使用以下配置规则来做到这一点

{
test: require.resolve("vue/dist/vue.esm.js"),
loader: "expose-loader",
options: {
exposes: [{
globalName: "Vue",
moduleLocalName: "default",
}]
},
},

moduleLocalName 只是从属性 default 中提取 Vue 并使用 globalName 公开它,因此当您访问 window.Vue 时它就会在那里

关于javascript - 使用 Webpack 将 Vue 暴露给全局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59888524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com