Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2.0.0 beta9 编译小程序 某些情况会导致部分组件异常,引发 jsEnginScriptError #5139

Closed
zousandian opened this issue Dec 20, 2019 · 8 comments
Assignees
Milestone

Comments

@zousandian
Copy link

问题描述

taro-cli 版本:v2.0.0-beta.9

编译小程序,某些情况下会导致部分组件异常,进入相关页面显示 jsEnginScriptError 错误。

Component is not found in path "components/radio/index" (using by "pages/form/radio/index");onAppRoute
Error: Component is not found in path "components/radio/index" (using by "pages/form/radio/index")

最小复现 demo:
https://github.com/zousandian/taro-ui/commits/dev

复现步骤

  1. git clone taro-ui 仓库
  2. 按照升级指引升级到 2.0.0-beta9,编译小程序并预览,一切正常。
  3. 修改 src/page/layout/accordion/index.js 在 render(){ 下添加一行 console.log(AtAccordion)
 render () {
    // 在render中打印该页面引用的某个组件,引发编译bug
    console.log(AtAccordion)
  1. 重新 build 小程序,没有报错,预览进入以下页面:首页->表单->Radio 单选框 出现错误。
  2. 搜索 vendor.js 查看 AtRadio 组件,发现组件是有编译,但是和正常组件相比最后少了一行。添加 Component(__webpack_require__(/*! @tarojs/taro-weapp */ "./node_modules/@tarojs/taro-weapp/index.js").default.createComponent(AtRadio)); 就可以正常进入页面了。

错误如下:
Screen Shot 2019-12-20 at 10 44 02 AM

正常组件 exports.default 下面还有一行,例如:
Screen Shot 2019-12-20 at 10 53 42 AM

其他协助排查的信息

  1. 触发异常的页面(page/layout/accordion),编译后存在一些奇怪的代码
    Screen Shot 2019-12-19 at 10 23 41 PM
  2. 以上重现路径除了 AtRadio 有问题,还有其他一些组件也有问题。在不同页面尝试,可能触发不同组件的问题。暂时无法确认有什么规律。
  3. 除了以上重现路径会引发问题,可能还存在其他情况也会引发类似问题
  4. 经过排查发现这些异常的组件编译的时候 miniType 是 undefined, 没有被正确设置成 Component,导致 fileParseLoader 中没有添加最后一行代码
  5. 在 node_modules/@tarojs/mini-runner/dist/loaders/fileParseLoader.js 第 424 行左右,default下面添加一行,重新执行编译,可以打印出受影响的组件,正常组件不会进入 default。
default:
    console.log('exportVariableName', exportVariableName);
    break;

Screen Shot 2019-12-20 at 11 15 56 AM

发现在 default 下面添加以下代码可以临时解决该问题

    if (exportVariableName) {
     node.body.push(template(`Component(require('${taroMiniAppFramework}').default.createComponent(${exportVariableName}))`, babylon_1.default)());
    }

但是为什么编译的时候某些组件 miniType 没有正确设置?除了以上方式,还有哪些情况可能触发异常?还请大佬们帮忙看看。

@taro-bot
Copy link

taro-bot bot commented Dec 20, 2019

CC @Chen-jj

@taro-bot
Copy link

taro-bot bot commented Dec 20, 2019

欢迎提交 Issue~

如果你提交的是 bug 报告,请务必遵循 Issue 模板的规范,尽量用简洁的语言描述你的问题,最好能提供一个稳定简单的复现。🙏🙏🙏

如果你的信息提供过于模糊或不足,或者已经其他 issue 已经存在相关内容,你的 issue 有可能会被关闭。

Good luck and happy coding~

@taro-bot
Copy link

taro-bot bot commented Dec 23, 2019

CC @luckyadam

@luckyadam luckyadam assigned luckyadam and unassigned luckyadam and Chen-jj Dec 23, 2019
@luckyadam
Copy link
Member

由于小程序机制因素,打印组件对象在小程序中会导致很多问题,所以现在改成编译时会移除组件文件的引用,现在打印组件引用会直接报错

@helvenk
Copy link

helvenk commented Dec 24, 2019

我也遇到了同样的问题,报错信息一致,但是我没有打印任何东西。用 2.0.0-beta.10 版本生成的模板项目,随便写一个最简单的组件,然后在首页中引用,就会报这个错。查看生成的代码,组件目录下只有一个 index.json 文件,没有生成 index.js index.wxml 这些东西

@helvenk
Copy link

helvenk commented Dec 24, 2019

@luckyadam

@boxcc
Copy link

boxcc commented Dec 24, 2019

1.3.31同样错误, 在对应组件再保存一次就自动恢复正常

@BinZhiZhu
Copy link

1.3.33 同样遇到过 但是还是解决了 初步定位是static 关键字的问题,最新版本编译是有做什么处理么?一直以为是组件编译或者渲染的问题。。。这个提示太坑了。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants