Компонент Vue с одним файлом - функции babel не передаются асинхронно - PullRequest
0 голосов
/ 11 июня 2018

У меня есть небольшое приложение vue, которое содержит несколько .vue отдельных файловых компонентов.Один из компонентов имеет несколько простых асинхронных функций, которые я хотел бы преобразовать в дружественный к ES5 код с помощью преобразований Babel «асинхронизация с генератором» и «регенератор».У меня есть асинхронные функции в других .js файлах, которые конвертируются правильно, поэтому я знаю, что преобразования настроены правильно и работают так, как должны.Кроме того, другие преобразования Babel успешно применяются к файлу .vue, поэтому кажется, что js-часть .vue проходит через babel, но я немного растерялся, почему эти функции не работаютпреобразован правильно.Например, в файле .vue у меня есть метод:

addQuestion: async function () {
    try {
        /* Test code */
        const tempLit = `this is a template string - ${num}`;
        let temp = 3;
        /********************/

        const id = await Api.addQuestion(this.form.id); //responds with Id
        const question = { order: this.questions.length + 1, id: id, isNew: true, deleted: false };
        this.form.questions.push(question);
        $("html, body").animate({ scrollTop: document.body.scrollHeight }, 500);
    } catch (e) {
        this.error(e);
    }
}

, который преобразуется в следующий пакет в пакете через веб-пакет:

addQuestion: async function addQuestion() {
    try {
        /* Test code */
        var tempLit = "this is a template string - " + num;
        var temp = 3;
        /********************/

        var id = await _FormsApi2.default.addQuestion(this.form.id); //responds with Id
        var question = { order: this.questions.length + 1, id: id, isNew: true, deleted: false };
        this.form.questions.push(question);
        $("html, body").animate({ scrollTop: document.body.scrollHeight }, 500);
    } catch (e) {
        this.error(e);
    }
}

Как видно изНебольшой образец тестового кода между комментариями, некоторые функции ES6 успешно конвертируются, что говорит о том, что js запускается через babel.

Поэтому я предполагаю, что мой вопрос заключается в том, нужно ли что-то конкретное, что необходимо сделать, чтобы функции ES7, такие как асинхронная работа в .vue файлах?

Моя текущая конфигурация веб-пакета выглядит следующим образом:

{
    entry: [
        "babel-polyfill", // Set up an ES6-ish environment
        "whatwg-fetch", // fetch polyfill
    ].concat(modules),// application entry point
    output: {
        filename: "./assets/scripts/vue/bundle.js"
    },
    module: {
        noParse: /es6-promise\.js$/,
        loaders: [
            {
                test: /\.vue$/,
                loader: "vue-loader",
                options: {
                    loaders: {
                        js: {
                            loader: 'babel-loader',
                            options: {
                                presets: ['es2015']
                            }
                        }
                    }
                }
            },
            {
                test: /\.js$/,
                exclude: file => (/node_modules/.test(file) && !/\.vue\.js/.test(file)),
                loader: "babel-loader",
                query: {
                    plugins: [
                        "transform-runtime",
                        "transform-regenerator", // not needed in Chrome or Firefox. Soon won't be needed in Edge or Safari.
                        "transform-async-to-generator",
                        "transform-es2015-template-literals"
                    ],
                    presets: ["es2015"]
                }
            },
            {
                test: /\.s[a|c]ss$/,
                loader: 'style!css!sass'
            }
        ]
    },
    plugins: [
        // responsible for identifying common files and generating a shared bundle
        //new webpack.optimize.CommonsChunkPlugin({
        //    name: 'common' // Specify the common bundle's name.
        //}),
        new WebpackNotifierPlugin(),
    ],
    resolve: {
        alias: {
            'vue': "vue/dist/vue.min.js"
        }
    }
}

1 Ответ

0 голосов
/ 13 июня 2018

Проблема была исправлена ​​добавлением предустановки babel stage 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...