TypeError: this.getOptions is not a function 报错:react中使用webpack,却无法对less文件打包

使用react写前端,需要用webpack做一个打包。之前都是正常运行的,现在加入了less文件就失败了。可以确定问题就在less文件上。下面介绍如何正确加入less文件,并对我发生的错误进行解析。

webpack4 处理less文件 - 不骄不傲 - 博客园

这篇博客中提到的步骤很有帮助,但是一些细节需要额外注意,否则会引发下属错误,因此在此摘录:

1. 安装相关依赖
npm i style-loader css-loader less-loader less -D

注意:此处直接安装极易引发下属图片的错误,原因是less最新版8.0.0似乎有重大更新,使用逻辑与之前不同,一定要解决的话 可以参考vue 2 项目中使用less-loader 出现 TypeError: this.getOptions is not a function 错误_乐观的猴子的博客-CSDN博客,虽然我觉得没必要。

ERROR in ./src/style.less
Module build failed (from ./node_modules/style-loader/dist/cjs.js):
TypeError: this.getOptions is not a function
    at Object.loader (/pro-mern-stack-2/ui/node_modules/style-loader/dist/index.js:19:24)

那么正确的方式是:指定对应的安装版本,虽然我不确定最合适的范围,不过可以参考我的成功的版本:

    "css-loader": "^2.0.2",

    "less": "^3.9.0",

    "less-loader": "^7.3.0",

    "style-loader": "^0.23.1",

    "webpack": "^4.28.3",

    "webpack-cli": "^3.2.1"

注意,和一些博客上所强调的不同,不仅仅是less-loader版本不能过高,css-loader和style-loader版本也得相应降低。降低前,我的代码仍然不成功,降低后才跑通。

2. 配置webpack文件

module: {
        rules: [
            {
                test:/\.less$/,
                use:['style-loader','css-loader','less-loader']
            }
        ]
    }

这是链接给的方式,没错。我补充一下,这个可以和其他rules拼接到一起,如下图所示:

3. 当然,需要在使用的jsx文件开头引入,形如:

import './css/index.less'

4. 一个很多博客没写,但是依然值得提及的点:less文件到底放到哪里?

答案是,可以放到jsx同一个文件夹目录下。

 

这是我的文件目录架构,webpack将一众jsx打包,放到app.bundle.js中。可见,打包后的app.bundle.js是在另一个文件夹。这里不用担心,具体调用style.less的文件IssueFilter.jsx正常调用为'./style.less',然后上面的app.bundle.js能够找到正确的less文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值