iconv-lite TypeError: __webpack_require__(...) is not a function 问题解决

相信你在遇到这个问题的时候,你是在做electron,这个问题不是你的问题,是iconv-lite对electron不怎么适配,iconv也是同样的道理,最佳的解决方法就是从源码上解决,解决方法如下:

在electron工程的node_modules中,找到iconv-lite(前提是你已经安装上了),打开iconv-lite/lib/index.js,在140行~150行之间有这些语句:

// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.
var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;
if (nodeVer) {

    // Load streaming support in Node v0.10+
    var nodeVerArr = nodeVer.split(".").map(Number);
    if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {
        require("./streams")(iconv);
    }

    // Load Node primitive extensions.
    require("./extend-node")(iconv);
}

你要做的,就是都注释掉,类似这样:

// Load extensions in Node. All of them are omitted in Browserify build via 'browser' field in package.json.
var nodeVer = typeof process !== 'undefined' && process.versions && process.versions.node;
if (nodeVer) {

    // // Load streaming support in Node v0.10+
    // var nodeVerArr = nodeVer.split(".").map(Number);
    // if (nodeVerArr[0] > 0 || nodeVerArr[1] >= 10) {
    //     require("./streams")(iconv);
    // }

    // // Load Node primitive extensions.
    // require("./extend-node")(iconv);
}

然后引用iconv就没有什么问题了,注释掉这里是什么意思呢?就是关于streams,就是流,浏览器都支持流,但是nodejs并不是,在最初,node刚发布的时候(v0.10),stream最好就是交给浏览器或者用户来实现,你知道,浏览器是前端,node是后端,iconv对前后端的运行在这里是不同的,但是,electron本身,是一种web前端和node后端同时都有的一种状态,这就很有可能让iconv去运行这段旧代码,然而现在的webpack对于解析require(...)(...)这样的代码貌似有一点困难,然后它会把require(...)(...)这样的解析成require()然后就不能被当作是一个函数,这就是__webpack_require__(...) is not a function的由来。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值