Запуск dev-сервера в проекте, созданном Vue cli 3

Я установил Vue cli 3 глобально в моей системе windows, используя npm i -g @vue/cli.

затем я создал проект с помощью vue create vue-project

Я выбрал необходимые плагины, необходимые через подсказки .

это создало папку Vue-projject. Затем я изменил каталог в эту папку и запустил .

но я получаю следующую ошибку

PS E:rkworkspacevue-project> npm run serve

> vue-project@0.1.0 serve E:rkworkspacevue-project
> vue-cli-service serve

INFO  Starting development server...
94% asset optimization

ERROR  Failed to compile with 1 errors                                                                 14:58:40

error  in ./src/main.js

Module build failed: Error: [BABEL] E:rkworkspacevue-projectsrcmain.js: The new decorators proposal is not supported yet. You must pass the `"decoratorsLegacy": true` option to @babel/preset-stage-2 (While processing: "E:rkworkspacevue-projectnode_modules@vuebabel-preset-appindex.js")
    at E:rkworkspacevue-projectnode_modules@babelpreset-stage-2libindex.js:107:11
    at E:rkworkspacevue-projectnode_modules@babelhelper-plugin-utilslibindex.js:18:12
    at E:rkworkspacevue-projectnode_modules@babelcorelibconfigfull.js:172:14
    at cachedFunction (E:rkworkspacevue-projectnode_modules@babelcorelibconfigcaching.js:42:17)
    at loadPresetDescriptor (E:rkworkspacevue-projectnode_modules@babelcorelibconfigfull.js:243:63)
    at E:rkworkspacevue-projectnode_modules@babelcorelibconfigfull.js:68:19
    at Array.map (<anonymous>)
    at recurseDescriptors (E:rkworkspacevue-projectnode_modules@babelcorelibconfigfull.js:66:36)
    at recurseDescriptors (E:rkworkspacevue-projectnode_modules@babelcorelibconfigfull.js:97:26)
    at loadFullConfig (E:rkworkspacevue-projectnode_modules@babelcorelibconfigfull.js:112:6)

@ multi (webpack)-dev-server/client/index.js (webpack)/hot/dev-server.js ./src/main.js

как мне это исправить?

2 ответов


обновление: исправление теперь доступно в v3.0.0-beta.7. В настоящее время это исправление opt-in, поэтому вам нужно добавить decoratorsLegacy:true до .babelrc вновь созданного проекта Vue:

{
  "presets": [
    [
      "@vue/app",
      {
        "decoratorsLegacy": true
      }
    ]
  ]
}

чтобы исправить существующий проект, отредактируйте .babelrc как показано выше, обновите package.json заменить beta.6 С beta.7 и перезапустите yarn/npm install.

TLDR: здесь PR (vue-cli #1163) исправить проблема, но лучшее решение IMO-использовать .babelrc.js (ниже).


есть GitHub вопрос, комментарий что означает @babel/preset-stage-2@7.0.0-beta.44 помог бы, но установка его не помогла. Другой предложение заменить Бабеля presets config в .babelrc со следующим действительно разрешена ошибка:

{
  "presets": [
    // "@vue/app",  // REMOVE THIS
    ["@babel/preset-env", {
      "targets": {
        "browsers": [
          "> 5%",
          "last 2 versions",
          "not ie <= 8"
        ]
      },
      "modules": false,
      "exclude": [
        "transform-regenerator"
      ]
    }],
    ["@babel/preset-stage-2", {
      "useBuiltIns": true,
      "decoratorsLegacy": true
    }]
  ]
}

Примечание @vue/app предустановка должна быть удалена, потому что она инициализирует @babel/preset-stage-2 без необходимого собственность (decoratorsLegacy: true). Это решение работает, но оно не совместимо с любыми потенциальными улучшениями, сделанными в @vue/app preset (включая любые исправления для этой самой проблемы).

.babelrc.js

более прямой совместимый обходной путь-обернуть @vue/app preset и изменить config для @babel/preset-stage-2. Когда ремонтники исправляют @vue/app, мы можем просто вернуться к значению по умолчанию .babelrc. Чтобы получить эту работу, переименуйте .babelrc to .babelrc.js и замените его содержимое с:

const vueBabelPreset = require('@vue/babel-preset-app');

module.exports = (context, options = {}) => {
  // Cache the returned value forever and don't call this function again.
  context.cache(true);

  const {presets, plugins} = vueBabelPreset(context, options);

  // Find @babel/preset-stage-2, and update its config to enable `decoratorsLegacy`.
  const presetStage2 = require('@babel/preset-stage-2');
  const preset = presets.find(p => p[0] === presetStage2);
  if (preset) {
    preset[1].decoratorsLegacy = true;
  }

  return {
    presets,
    plugins
  };
}

соответствующие сопровождающие их соответствующих пакетов знают об этой проблеме. Per this Github вопрос, vue create <project-name> в настоящее время сломан.

Я пробовал некоторые из решений, представленных в проблеме, и никто не работает для меня. Вы могли бы дать им попробовать и посмотреть, работают ли они на вас.