Webpack和Vue-CLI的间歇性“ TypeError:“ exports”为只读”错误

时间:2018-12-05 23:45:50

标签: javascript vue.js webpack node-modules vue-cli

我有一个Vue-CLI应用程序,直到最近它运行良好。现在,有时此消息会出现在控制台中,而其他应用程序无法加载:

TypeError: "exports" is read-only

直接原因似乎是我的模块之一,该模块使用module.exports导出其默认功能。 I understand that Webpack(Vue CLI使用)减少了对module.exports的支持,至少在模块还包含ES2015 import语句的情况下。但这是not the case here。 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 :(得分:2)

根据https://github.com/vuejs/vue-cli/issues/3227,这是由于某些可配置的行为。将此添加到您的vue.config.js中:

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

以我的情况工作。

答案 1 :(得分:0)

即使添加

,我也遇到了这个问题
chainWebpack: (config) => {
  config.resolve.symlinks(false)
}

到我的vue.config.js

为解决此问题,我删除了node_modules文件夹并运行了一个全新的npm install