类型错误:this.getOptions 不是一个函数。

350

我在安装 Bootstrap 时遇到了一个奇怪的错误。错误信息如下:Syntax Error: TypeError: this.getOptions is not a function。我尝试卸载 less-loader 并安装 less-loader@5.0.0,因为我在网上看到这个建议,但是没有任何效果。我不确定该怎么做。

 @ ./node_modules/vue-style-loader??ref--8-oneOf-1-0!./node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!./node_modules/vue-loader-v16/dist/stylePostLoader.js!./node_modules/postcss-loader/src??ref--8-oneOf-1-2!./node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader-v16/dist??ref--0-1!./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=scss 4:14-419 14:3-18:5 15:22-427
 @ ./src/App.vue?vue&type=style&index=0&id=7ba5bd90&lang=scss
 @ ./src/App.vue
 @ ./src/main.js
 @ multi (webpack)-dev-server/client?http://192.168.1.182:8080&sockPath=/sockjs-node (webpack)/hot/dev-server.js ./src/main.js

2
如果您能添加需要执行的步骤以重现问题,那就太好了。 - Sabito stands with Ukraine
17个回答

2
同样的问题,降级到以下版本有所帮助:
"sass": "^1.38.0",
"sass-loader": "^10.2.0",

2
这个答案是 D_Pain 接受的那个答案的副本。 - phil294

1
在我的情况下,我在CentOS 7上编译node-sass时遇到了困难,后来我通过删除node-sass并换成sass来解决了这个问题。
npm uninstall node-sass
npm install sass
npm install sass-loader^8

1

感谢itacode的帮助,我们只需要执行以下操作:

-D表示仅针对开发环境,您可以将其删除以适用于所有环境。

Yarn:

# yarn add @vue/cli@^4
yarn add -D sass
yarn add -D less
yarn add -D sass-loader@^10
yarn add -D less-loader@^7

或者使用npm:
# npm i @vue/cli@^4
npm i -D sass
npm i -D less
npm i -D sass-loader@^10
npm i -D less-loader@^7

1

命令yarn add sass-loader会安装版本11,该版本不兼容Webpack 4及以下版本。当前的Vue CLI V4使用Webpack v4。

您必须等待Vue CLI V5(将使用Webpack 5)发布(目前处于Beta版)才能使用sass-loader v12。 或者,您可以更新到Webpack 5,但一定要阅读CHANGELOG。


这个答案是D_Pain所接受的答案的重复。 - phil294
不是重复的答案,而是更好的答案 - Exlord

0

NPM会下载依赖包到模块内,如果它们与你的package.json中的版本不同,但有时它会将最新版本或依赖包(我不知道为什么)下载到模块中...

例如,你可以在你的package.json中有sass-loader: 2.X,而一个名为XXXX的模块也有sass-loader: *在其依赖包中(你可以在该XXXX模块内的package.json中检查)。

npm会为你下载sass-loader 2.X,并为XXXX包下载sass-loader: 3.X - 这将导致错误。

一个快速的解决方法是从XXXX/node_modules中删除该附加包。你还可以检查XXXX模块使用的包版本,并尝试在你的项目中使用相同的版本。

在我的情况下,font-awesome-sass-loader@2.0.1project.json

  "dependencies": {
    "css-loader": "*",
    "sass-loader": "*",
    "style-loader": "*"
  },

下载了 sass-loader: 3.0.0

但是根据我的项目中的 project.json,npm 下载了 sass-loader: 2.0.0:

"style-loader": "2.0.0"

我删除了 node_modules/font-awesome-sass-loader/node_modules/,问题得到解决。


直接删除整个 node_modules/ 文件夹,然后重新安装它们怎么样? - kevinluo201

0

我已经添加了这些行,我的代码可以正常运行,请尝试根据您的包和版本添加或删除。

  "dependencies": {
    "core-js": "^3.6.5",
    "node-sass": "^7.0.1",
    "sass-resources-loader": "^2.1.0",
    "vue": "^3.0.0"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "~4.5.13",
    "@vue/cli-plugin-eslint": "~4.5.13",
    "@vue/cli-service": "~4.5.13",
    "@vue/compiler-sfc": "^3.0.0",
    "babel-eslint": "^10.1.0",
    "eslint": "^6.7.2",
    "eslint-plugin-prettier": "^3.1.3",
    "eslint-plugin-vue": "^7.0.0",
    "node-sass": "^4.14.1",
    "prettier": "^1.19.1",
    "sass-loader": "^10.0.2",
    "vue-template-compiler": "^2.6.11"
  },

0

当使用Webpack 4版本时,这是Vue CLI 4的默认设置。您需要确保您的加载器与其兼容。否则,您将收到有关冲突对等项的错误。在这种情况下,您可以使用旧版本的加载器,该加载器仍与Webpack 4兼容。

# Sass
npm install -D sass-loader@^10 sass

还是不行吗?

删除文件夹 node_modules

npm install

了解更多


1
这个答案是D_Pain所接受的答案的重复。 - phil294

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接