我小程序代码1个月都没用动过了。但是今天运行之后,模拟器没问题。iOS和Android都报错。错误如下:
后续补充,以下是我的解决办法:
# 问题记录
## 问题记录-01
- 问题:真机运行,出现:
```log
`length` must be a positive 32-bit integer
Error during evaluating file "app.js":
```
无论是更改小程序基础库,还是
- 探索
出问题的地方是,通过HbuilderX,编译后形成的common/vendor.js以下代码:
```js
module.exports = function setFunctionLength(fn, length) {
if (typeof fn !== 'function') {
throw new $TypeError('`fn` is not a function');
}
if (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {
// throw new $TypeError('`length` must be a positive 32-bit integer');
return fn //此处更改
}
/***以下代码省略***/
return fn;
};
```
在报错的地方打日志,发现是解析一个叫:apply的方法有错代码如下:
```js
// var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
var $reflectApply=Reflect.apply //此处更改
var $defineProperty = __webpack_require__(/*! es-define-property */ 51);
var $max = GetIntrinsic('%Math.max%');
module.exports = function callBind(originalFunction) {
if (typeof originalFunction !== 'function') {
throw new $TypeError('a function is required');
}
var func = $reflectApply(bind, $call, arguments);
return setFunctionLength(
func,
1 + $max(0, originalFunction.length - (arguments.length - 1)),
true
);
};
```
在小程序中,似乎"$max方法不生效"
- 最终解决办法
使用原始的yarn.lock,删除掉node_modules,再次执行yarn。
详细调查是引用的call-bind这个库更新导致set-function-length判断异常。
已解决,有两种办法解决。