Vue 2.x + Laravel 5.4 在资源管理器中不起作用

Posted

技术标签:

【中文标题】Vue 2.x + Laravel 5.4 在资源管理器中不起作用【英文标题】:Vue 2.x + Laravel 5.4 not working in Explorer 【发布时间】:2018-05-01 18:07:57 【问题描述】:

我正在做一个用 Laravel 5.4 和 Vue 2 + Yarn 编写的项目 我在 IE 中遇到以下 JS 错误(版本 9-11)

    语法错误(在 const 和箭头函数中使用的行) 对象不支持属性或方法“startsWith”

我错过了什么?我想知道我是否在滥用 babel 或者可能缺少其他东西。我在这里完全感到沮丧,因为我已经花了很多时间来弄清楚为什么在涉及 Vue 2 组件时在 IE 中没有任何东西可以正常工作。任何帮助或建议将不胜感激!

app.js:

require('./bootstrap');

var Promise = require('es6-promise').Promise;
require('babel-polyfill')
Promise.polyfill();
window.Vue = require('vue');
import Vue2Filters from 'vue2-filters'
import BootstrapVue from 'bootstrap-vue'

我的 webpack.mix.js(试图安装 babel)

mix.js('resources/assets/js/app.js', 'public/js')
    .sass('resources/assets/sass/app.scss', 'public/css')
    .babel('out.es6.js', 'out.js')
    .options(
        polyfills: [
            'Promise'
    ]
);

我的 package.json


    "private": true,
    "scripts": 
        "dev": "npm run development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch-poll": "npm run watch -- --watch-poll",
        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "npm run production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "build": "babel src -d lib"
    ,
    "devDependencies": 
        "accounting": "^0.4.1",
        "axios": "^0.15.3",
        "babel-cli": "^6.26.0",
        "babel-core": "^6.26.0",
        "babel-loader": "^7.1.2",
        "babel-polyfill": "^6.26.0",
        "babel-preset-env": "^1.6.1",
        "babel-preset-vue-app": "^1.3.1",
        "bootstrap-sass": "^3.3.7",
        "cross-env": "^3.2.3",
        "jquery": "^3.1.1",
        "laravel-mix": "0.*",
        "lodash": "^4.17.4",
        "vue": "^2.4.2",
        "vue-template-compiler": "^2.4.2",
        "webpack": "^3.8.1"
    ,
    "dependencies": 
        "bootstrap-vue": "^1.0.0-beta.7",
        "es6-promise": "^4.1.1",
        "vee-validate": "^2.0.0-beta.17",
        "vue-events": "^3.0.1",
        "vue-strap": "^1.1.37",
        "vue2-filters": "^0.1.9",
        "vuelidate": "^0.5.0"
    

【问题讨论】:

我正在使用带有 IE 和 AFAIK 的 Vue 应用程序,Vue 只需要 Promises polyfill。但如果您使用箭头函数,请确保您使用的是正确的 babel 设置。我认为你需要 babel-preset-es2015-ie。 startsWith 在 IE 中不可用,您需要对其进行填充。 Transpiling 不会自动 polyfill 缺失的函数,因为你只翻译语法。 【参考方案1】:

我通过运行 babel 代码成功解决了问题,将结果回显到特定位置:

我的 .bashrc:


    "presets": ["es2015"]

命令:

./node_modules/.bin/babel public/js/app.js > public/js/out.js

然后在布局文件中我包含了 public/js/out.js 文件而不是 public/js/app.js

【讨论】:

以上是关于Vue 2.x + Laravel 5.4 在资源管理器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Vue js 无法在 Laravel 5.4 中渲染组件

我无法在 Laravel 5.4 上测试简单的 vue 示例组件

如何在 Vue.js 和 Laravel 5.4 中发出 POST 请求

Vue 组件显示在本地主机上,但不在使用 Laravel 5.4 的服务器上:Passport

Vue 组件未显示 - Passport 实现 Laravel 5.4

Vue.js 2.0 Laravel 5.4 将对象传递给应用程序并跨组件全局使用它