我有一个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运行测试套件。
我希望您能提出一些有关如何使我的环境更稳定的建议,以免这种间歇性问题再次发生。
答案 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