NervJS / taro

开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发微信/京东/百度/支付宝/字节跳动/ QQ 小程序/H5/React Native 等应用。 https://taro.zone/
https://docs.taro.zone/
Other
35.6k stars 4.8k forks source link

taro 转换为rn时丢失import声明 #3146

Closed creasy2010 closed 5 years ago

creasy2010 commented 5 years ago

问题描述 转换为rn时,importk路径如果包含"pages关键字"则信息丢失..

复现步骤 [或者可以直接贴源代码,能贴文字就不要截图]

源代码:

import counter from '@/pages/counter';
export default {
  counter,
} ;

转换后的代码

import Taro from '@tarojs/taro-rn';
export default {
  counter
};

期望行为 不过滤import counter from '@/pages/counter';

报错信息 见上面生成代码部分 [这里请贴上你的完整报错截图或文字]

系统信息

Taro v1.2 及以上版本已添加 taro info 命令,方便大家查看系统及依赖信息,运行该命令后将结果贴下面即可。 Taro v1.3.0-beta.3

Taro CLI 1.3.0-beta.3 environment info: System: OS: macOS 10.14.5 Shell: 5.3 - /bin/zsh Binaries: Node: 10.15.1 - ~/.tnvm/versions/node/v10.15.1/bin/node npm: 6.9.0 - ~/.tnvm/versions/node/v10.15.1/bin/npm npmPackages: @tarojs/async-await: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/cli: ^1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/components: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/plugin-babel: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/plugin-csso: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/plugin-less: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/plugin-uglifyjs: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/redux: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/redux-h5: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/router: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/taro: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/taro-alipay: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/taro-h5: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/taro-swan: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/taro-weapp: 1.3.0-beta.3 => 1.3.0-beta.3 @tarojs/webpack-runner: 1.3.0-beta.3 => 1.3.0-beta.3 eslint-config-taro: 1.3.0-beta.3 => 1.3.0-beta.3 eslint-plugin-taro: 1.3.0-beta.3 => 1.3.0-beta.3 nervjs: ^1.4.0-beta.3 => 1.4.0-beta.4

补充信息 在用babel修改ast时 , 有一个判断导致过滤掉包含关键字pages的import 不理解 这个是什么含义 https://github.com/NervJS/taro/blob/master/packages/taro-cli/src/rn/transformJS.ts#L261

[根据你的调查研究,出现这个问题的原因可能在哪里?] 去掉判断 if (pathArr.indexOf('pages') >= 0)


      // 引入的包为 npm 包
      if (!Util.isNpmPkg(value)) {
        // import 样式处理
        if (REG_STYLE.test(valueExtname)) {
          const stylePath = path.resolve(path.dirname(filePath), value)
          if (styleFiles.indexOf(stylePath) < 0) {
            //样式条件文件编译 .rn.scss
            const realStylePath = Util.resolveStylePath(stylePath)
            styleFiles.push(realStylePath)
          }
        }
        if (value.indexOf('.') === 0) {
          const pathArr = value.split('/')

         //去掉此判断
         // if (pathArr.indexOf('pages') >= 0) {
         //   astPath.remove()
         // } else 
         //去掉此判断

        if (REG_SCRIPTS.test(value) || path.extname(value) === '') {
            const absolutePath = path.resolve(filePath, '..', value)
            const dirname = path.dirname(absolutePath)
            const extname = path.extname(absolutePath)
            const realFilePath = Util.resolveScriptPath(path.join(dirname, path.basename(absolutePath, extname)))
            const removeExtPath = realFilePath.replace(path.extname(realFilePath), '')
            node.source = t.stringLiteral(Util.promoteRelativePath(path.relative(filePath, removeExtPath)).replace(/\\/g, '/'))
          }
        }
        return
      }
taro-bot[bot] commented 5 years ago

欢迎提交 Issue~

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

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

Good luck and happy coding~

taro-bot[bot] commented 5 years ago

CC @Pines-Cheng

Pines-Cheng commented 5 years ago

https://github.com/NervJS/taro/pull/3147