React Native开发之IDEAtom+Nuclide安装,运行,调试

欢迎Follow我的Github,博客会同步在Github的Blog仓库更新。也可以关注CSDN博客的React Native分类


前言

工欲善其事,必先利其器

好像在哪听到一句话,”满级程序员不需要IDE,不需要自动补全,不需要静态语法检查”。对于这种言论,我只想说bullshit

IDE对于开发还是很重要的,而React Native开发官方推荐使用Atom+Nuclide插件。本文会详细的介绍,如何配置好这个环境,并且以一个示例工程为例,介绍如何利用这套环境进行开发,与运行,调试,断点

使用Nuclide你能够

  • 配合flow进行静态语法检查,自动补全
  • 方便的debug
  • 进行版本控制,方便diff
  • iOS模拟器Log

对了,为了从零开始,我卸载了之前安装好的atom和对应的插件


Mac/Windows/Linux

推荐还是用Mac开发React Native,因为iOS运行需要Mac的环境。而且,用Mac的话,也比较省心。

本文的所有流程,均以Mac为例


准备工作

本文默认读者已经安装好了React Native,如果没有安装好,可以按照官网的讲解安装,很简单,本文侧重IDE

注意,如果没有安装watchman 和Flow,建议安装

安装watchman-自动监听文件内容变化,刷新数据

 
 
  • 1
brew install watchman

如果提示没有安装brew

1
 
 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装flow-提供静态语法检查,自动补全

install flow

如果你之前安装了flow或者watchman,建议更新到最新版本

1
  
  
  • 2
  • brew upgrade watchman brew upgrade flow

    安装Atom

    下载地址
    这个没什么难的,解压缩之后,把Atom从下载目录,拖到应用程序目录即可。
    打开Atom,你看到的界面应该是这样的


    安装Nuclide

    这里,我们在Atom中,用图形化界面来安装。

    点击菜单栏:Atom->Preferences,或者可以”Command+,”快捷打开

    然后,在Install Packets的输入框中,输入nuclide,出现的第一个就是我们想要安装的,点击install

    默认安装nuclide之后,会安装一大堆的依赖包,安装完成后

    可以看到,红色部分是额外的Toolbar可以快捷打开一些选项,小的红色框里多了一个nuclide选项。

    如果没有默认安装这些依赖包,可以选中,Packages->Settings View->Manage Packets

    然后,搜索nuclide,再nuclide package上双击,进入设置

    勾选Install recommended packets on startup

    退出Atom,再打开,会发现自动安装这些依赖包


    新建一个工程

    1
     
     react-native init Demo -verbose

    然后,打开Atom,点击Add project folder

    再在右侧目录双击index.ios.js,你看到的应该是这样的界面


    自动补全

    我们在这一行上面,输入fun

    1
     
     class Demo extends Component {

    会看到

    然后,会车,你就会发现自动生成了方法

    2
      
      
  • 3
  • function functionName() { }

    自动补全肯定没有XCode 或者Android Studio来的那么强力,不过有总比没有好对吧。


    类型标注

    将光标放到上文提到的functionName上,你会发现如图,就是出现了这个方法的类型

    这时候,点击出现的针头,那么这个类型标注就会一直显示在界面上


    语法检查

    我们在function里随便输入

    () {
      a
    }

    然后,command+s保存文件,这时候,正常会出现如下检查错误

    其中

    • 1,表示这一行有错误,点击那个红色的三角图标,你可以看到详细的错误描述
    • 2,表示整个工程的错误

    点击2,你会看到错误和警告的列表

    如果这里,没有检查出错误

    打开终端,cd到工程的根目录,例如我的

    1
     
     /Users/huangwenchen/Desktop/Demo

    然后,用终端检查flow能否正常工作

    1
     
     Leo-2:Demo huangwenchen$ flow

    如果出现错误

    2
     
     .flowconfig:97 Wrong version of Flow. The config specifies version ^0.25.0 but this is version 0.20.1
    Leo-2:Demo huangwenchen$ brew update flow

    证明你本地的flow版本和react native默认使用的flow版本不一致,通常,更新到最新版本即可

    3
      
      
  • 4
  • 5
  • 6
  • 7
  • 8
  • Leo-2:Demo huangwenchen$ brew upgrade flow ==> Upgrading 1 outdated package,with result: flow .0 ==> Upgrading flow ==> Downloading https://homebrew.bintray.com/bottles/flow-.0.el_capitan.bottle.tar.gz ############ 100.0% ==> Pouring flow-.0.el_capitan.bottle.tar.gz ==> Caveats

    跳转到方法或者类型定义

    使用command+鼠标左键


    在Nuclide运行项目

    第一步,运行react native packager

    点击 command + shift + p打开command palette(打开终端选项),然后输入

    1
     
     react native start

    然后,选择
    Nuclide React Native :Start packager

    如果,出现错误

    8
      
      
  • 9
  • 10
  • 11
  • 12
  • /Users/huangwenchen/Desktop/Demo/node_modules/react-native/local-cli/cli.js:123 class CreateSuppressingTerminalAdapter extends TerminalAdapter { ^^^^^ SyntaxError: Unexpected reserved word at exports.runInThisContext (vm73:16) at Module._compile (module443:25) at Object.Module._extensions..js (module478:10) at Module.load (module355:32) at Function.Module._load (module310:12) at Function.Module.runMain (module501:10) at startup (node129:16) at node814:3

    说明你node的版本太低,运行以下命令更新

    3
     
     sudo npm cache clean -f
    sudo npm install -g n
    sudo n stable

    第二步,终端运行项目
    cd到项目目录,执行

    2
     
     $ react-native run-ios
    $ react-native run-android

    在Nuclide中调试

    执行完上面一步后,你应该会看到这样的模拟器界面

    然后,在Nuclide中,点击 command + shift + p打开command palette(打开终端选项),输入react native debug

    接着,点击模拟器,Command+D,选择Enable Remote JS debugging

    这时候,你会看到,Nuclide中,加载了debug窗口


    添加断点

    和很多IDE一样,在每一行左边左键可以添加断点了

    同时,修改代码看看效果

    12
     
     function myLog() {
      console.log("adtad");
    }
    Component {
      render() {
        myLog();
          return (
          <View style={styles.container}>
            <Text style={styles.welcome}>
              Welcome to React Native!
            </Text>
            ......

    保存,点击模拟器,Command+R,会发现,停在了断点处

    其它的都是JS的调试技巧了,这里不再赘述,后面写博客的时候,遇到了再说。


    Element Inspector

    像网页调试,你可以再浏览器里动态修改网页的HTML代码,在React Native中调试你也可以
    Command + shift + p然后打开如下图

    接着,你就会发现像HTML的Element Inspector出现了,你可以看到视图的布局和对应的属性


    总结

    Facebook出品的一般都容易安装,并且使用起来上手相对容易。本文更多的是对英文文档的总结,以及列出了我在安装使用过程中遇到的一些坑,希望能有些帮助。

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
    我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
    我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
    react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
    mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
    我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
    本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
    上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
    上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
    我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
    在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
    楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
    我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
    前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
    我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
    上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
    开源不易,感谢你的支持,❤ star me if you like concent ^_^
    hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
    本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
    ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom