在Nuxt 1.4.2
中,我的nuxt.config.js
中包含以下内容:
build: {
vendor: ['babel-polyfill'],
babel: {
presets: [
['vue-app', {
useBuiltIns: true,
targets: { ie: 11, uglify: true },
},
],
],
},
},
在Nuxt 2.0
中似乎所有这些都被破坏了。至少我希望能够充分填充以使IE 11正常工作。这是我尝试过的:
删除build.babel
可使构建过程正常工作
build: {
vendor: ['babel-polyfill'],
},
但是我认为 build.vendor
现在只是被忽略,因此这似乎无济于事。
我尝试添加:
script: [
{ src: 'https://cdn.polyfill.io/v2/polyfill.min.js' },
],
与我的head
一起,
render: {
resourceHints: false,
},
禁用preload
提示(我不确定是否很重要)。这将导致页面看起来正确-polyfill.min.js
在所有其他脚本之前被加载。不知何故,当我在ie11上进行测试时,Object.entries
未定义并且页面爆炸。
答案 0 :(得分:16)
以下是我升级到nuxt 2.2.0
并采用必要的polyfill使我的应用程序在IE 11上运行的步骤。您的经验可能会有所不同,具体取决于您安装了哪些软件包。
第1步
从build.vendor
中删除build.babel
和nuxt.config.js
。
build.vendor
已过时。我尝试调整build.babel
,因为nuxt docs表示默认使用vue-app
。我认为它实际上是在使用babel-preset-env。这和其他工具一起取决于browserslist,后者具有一些合理的defaults。我没有更改浏览器列表的配置,但是可以按照他们的docs进行操作。
第2步
升级或更换所有引起构建问题的模块。当我升级时,@nuxtjs/apollo
通过其依赖项之一出现了翻译问题。此后一直是resolved,但是我最终切换到vue-apollo
+ apollo-boost
,因为它更适合我的项目。
第3步
为core-js
没有提供的附加功能添加polyfill,但是目标浏览器需要。在对目标进行测试时,您应该能够根据控制台中抛出的任何异常来确定这些异常。
我通过在nuxt.config.js
中添加以下内容来使用polyfill.io:
const features = [
'fetch',
'Object.entries',
'IntersectionObserver',
].join('%2C');
head: {
script: [
{ src: `https://polyfill.io/v3/polyfill.min.js?features=${features}`, body: true },
],
},
注意:我包含了
body: true
,可将脚本移出页面的head
部分。但是,它将插入任何应用程序代码之前。注意::建议link prefetching使用
IntersectionObserver
。
您可以使用builder创建类似的URL。请注意,一旦选择了特征,构建器将自动选择default
,其功能(据我所知)与core-js
一起提供的polyfill相同。因为core-js
当前不是可选的(无论如何您都将要发送它),所以不包括default
中的polyfill.io
集是有道理的。
要深入讨论polyfill,以及为什么polyfill.io
可能是个好主意,请参阅this post。简短的版本是,它仅基于浏览器的UA加载客户端实际需要的内容。
最后,您需要测试您的应用,以查看在给定的浏览器中成功执行还需要哪些附加功能(如果有)。您可能需要重复几次此过程,直到所有错误消失。请确保在多个页面上进行测试,因为并非所有页面捆绑软件都具有相同的要求。
结论
尽管以上内容是特定于应用程序的,但希望这可以帮助您朝正确的方向发展。最重要的一点是,没有针对此的解决方案-您仍然需要在目标浏览器中进行测试,以验证代码是否可以执行。
答案 1 :(得分:4)
您还可以使用nuxt-polyfill模块。
[FunctionName("MyFristTriggerFunction")]
public static void MyFristTriggerFunction(
[EventHubTrigger("%eventHubName%", Connection = @"EventHubConnectionString")] EventData[] events
ILogger log)
{
将模块添加到您的nuxt.config.js:
npm install nuxt-polyfill
免责声明:我做到了。
答案 2 :(得分:3)
我尝试了上述所有方法,但没有任何效果。但是,我发现可以通过创建一个插件并将其添加到nuxt.config.js来使我的代码与IE11配合使用,如下所示:
// nuxt.config.js
plugins: [
{ src: '~/plugins/polyfills', mode: 'client' },
],
// plugins / polyfills.js
import 'core-js/fn/object/entries'
import 'core-js/fn/array/includes'
import 'core-js/fn/array/find'
import 'core-js/fn/array/from'
import 'core-js/es6/promise'
import 'core-js/fn/object/assign'
import 'core-js/es6/symbol'
import 'whatwg-fetch'
我删除了任何特殊的babel配置。仅此而已。我知道这意味着我的代码将始终运行polyfills,但没有第三方依赖(例如polyfill.io)。您可以根据需要编辑所需填充的列表。希望这对某人有帮助!
答案 3 :(得分:0)
我使用的是 nuxt 2.x
,修复很简单,你只需要在 nuxt.config.js
中添加 transpile
build: { transpile: ['vue-cli-plugin-apollo'] }