Периодическая ошибка "TypeError:" exports "доступна только для чтения" с Webpack и Vue-CLI - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть приложение Vue-CLI, которое до недавнего времени работало нормально.Теперь иногда это сообщение появляется в консоли, а остальная часть приложения не загружается:

TypeError: "exports" is read-only

Непосредственной причиной является один из моих модулей, который использует module.exports для экспорта своей функции по умолчанию., Я понимаю, что Webpack (который использует Vue CLI) уменьшил поддержку module.exports, по крайней мере, в случае модуля, который также содержит операторы ES2015 import.Но это здесь не так .А Webpack иногда просто компилирует его.

Что особенно странно, так это его прерывистость.Как правило, я могу временно устранить проблему с помощью rm -rf node_modules; npm install.(Установка пряжи не кажется надежной).Но потом это возвращается.

В чем может быть причина?Возможно, две конкурирующие зависимости?Мой package.json выглядит следующим образом:

  "dependencies": {
    "@turf/turf": "^5.1.6",
    "bluebird": "^3.5.3",
    "color": "^3.1.0",
    "mapbox-gl": "^0.50.0",
    "mapbox-gl-utils": "^0.4.0",
    "thenify": "^3.3.0",
    "vue": "^2.5.17",
    "vue-carousel": "^0.16.0-rc2"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^3.0.5",
    "@vue/cli-plugin-eslint": "^3.2.1",
    "@vue/cli-service": "^3.0.5",
    "babel-eslint": "^10.0.1",
    "babel-loader": "^8.0.4",
    "copy-webpack-plugin": "^4.6.0",
    "eslint": "^5.9.0",
    "eslint-plugin-vue": "^5.0.0",
    "less": "^3.9.0",
    "less-loader": "^4.1.0",
    "pug": "^2.0.3",
    "pug-plain-loader": "^1.0.0",
    "vue-template-compiler": "^2.5.17"
  },
  "postcss": {
    "plugins": {
      "autoprefixer": {}
    }
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ]
}

, а мой vue.config.js (упрощенно):

const CopyWebpackPlugin = require('copy-webpack-plugin')
const path = require('path');

module.exports = {
  chainWebpack: config => {
    config.module
      .rule('eslint')
      .use('eslint-loader')
      .tap(options => {
        options.configFile = path.resolve(__dirname, ".eslintrc.js");
        return options;
      })
  },
  configureWebpack: {
    plugins: [
      new CopyWebpackPlugin([ 
        { ... }          
    ]
  }
}

Я подозреваю, не будучи уверенным, что проблема вызванакогда я делаю обновления в своем модуле, который связан с помощью npm link.

Использование Vue CLI версии 2.1.1.

В качестве обходного пути, если я вместо этого использую инструкцию ES2015 exportДа, приложение работает, но тогда я не могу запустить свой набор тестов с NodeJS.

Я хотел бы получить любые предложения о том, как сделать мою среду более стабильной, чтобы эта периодически возникающая проблема не повторялась.

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

Я столкнулся с этой проблемой даже после добавления

chainWebpack: (config) => {
  config.resolve.symlinks(false)
}

к моему vue.config.js

Чтобы решить эту проблему, я удалил папку node_modules и запустил новую npm install

0 голосов
/ 02 января 2019

Согласно https://github.com/vuejs/vue-cli/issues/3227 это связано с некоторым настраиваемым поведением.Добавьте это в свой vue.config.js:

module.exports = {
  chainWebpack: (config) => {
    config.resolve.symlinks(false)
  }
}

Это работает в моем случае.

...