为本机应用定义入口点

时间:2017-12-10 18:51:00

标签: react-native

我刚刚开始使用本机反应,并使用create-react-native-app创建了一个基本应用。

我做了一些重组并制作了一些新文件夹,并将App.js重命名为Home.js.我修改了app.json以包含引用新Home.js文件的入口点。当我加载应用程序时,没有任何反应。没有错误,只是停留在世博会屏幕上。

.
 -components
 -screens
    -Home
        Home.js
 -config
 -node_modules
 -tests
 app.json

app.json文件:

{
  "expo": {
    "sdkVersion" : "23.0.0",
    "entryPoint" : "./screens/Home/Home.js"
  }
}

如何定义应用的入口点?

7 个答案:

答案 0 :(得分:10)

如果您使用的是Expo,则必须在app.json文件中指定入口点,如下所示:

{
  "expo": {
    "entryPoint": "./src/app/index.js"
  }
}

然后,在该文件中,您需要使用Expo.registerRootComponent(YOUR_MAIN_APP_COMPONENT)

注册该应用
import Expo from 'expo'
...

class App extends Component {
  ...
}

export default Expo.registerRootComponent(App);

这样您就可以在任何地方添加您的输入文件。

答案 1 :(得分:2)

您需要更新app.json,以使entryPointApp.js的新路径。

{
  "expo": {
    "entryPoint": "./src/App.js",
    ...
  }
}

但是,使用Expo.registerRootComponent(App)会在SDK 32中导致以下错误:

undefined is not an object (evaluating '_expo.default.registerRootComponent') 

可以通过显式导入registerRootComponent而不是尝试通过Expo.registerRootComponent对其进行修复

以下是示例App.js

import { registerRootComponent } from 'expo';

class App extends React.Component {
  ...
}

export default registerRootComponent(App);

答案 2 :(得分:2)

对于世博项目

根据当前的Expo文档,如果您想要与App.js文件不同的入口点,则可以更新package.json-添加一个main字段,其中包含所需路径入口点。然后,在入口点文件中,您还必须注册该应用程序的 root 组件。在未指定入口点且为App.js文件的情况下,Expo会自动执行此操作

package.json

{
 "main": "my/customEntry.js"
}

entryPointFile.js

import { registerRootComponent } from 'expo';
import MyRootComponent from './MyRoot';

registerRootComponent(MyRootComponent);

如果我想将主应用程序文件命名为App.js以外的其他名称怎么办? -https://docs.expo.io/versions/latest/sdk/register-root-component/#what-if-i-want-to-name-my

答案 3 :(得分:1)

我通过react-native-script创建了项目。在应用程序(App.js)的默认入口点中,您可以导出从您的条目导入的应用程序。

- node_modules
- App.js
- build
    - main.js

File App.js:

import App from './build/main'
export default App

答案 4 :(得分:1)

我还更喜欢将所有源放在单独的文件夹中,例如 src / ,我找到了不同的解决方案:

  1. 在expo cli生成的package.json中,我看到的主要属性是 node_modules / expo / AppEntry.js
  2. 我将 node_modules / expo / AppEntry.js 复制到 src / expoAppEntry.js ,只是将App导入更改为import App from './App';,所以它指向我的* src / App.tsx`
  3. 然后,我当然将package.json主要属性更改为 src / expoAppEntry.js

在此处https://github.com/fibo/tris3d-app/blob/master/src/expoAppEntry.js

中查看有效示例

答案 5 :(得分:0)

doc中所述,如果您的项目处于托管工作流程设置(默认设置)中,则必须导入registerRootComponent并以根组件作为参数调用它,您希望成为主要文件的文件:

import { registerRootComponent } from 'expo';

const AnyName() { ... } // Your root component

registerRootComponent(AnyName)

然后,在您的 package.json 文件中,将“主”更改为该文件的相对路径,例如

{
  "main": "src/main.js"
}

答案 6 :(得分:0)

对于那些使用 Expotypescript 的人,您不必在 app.json 的入口点末尾添加 .tsx。例如,您的入口点可以是:

{
  "expo": {
    "entryPoint": "./app/components/AppEntryPoint/App.component",
    "name": "Sample App",
     ...
     }
  ...
}

在这个例子中,入口点组件的名称是 App.Component.tsx。但是不提及扩展也可以。除此之外,在根组件中,写入 export default registerRootComponent(AppComponent)registerRootComponent(AppComponent) 都应该像从文件中导出组件一样工作,仅意味着其他文件也可以使用它。不写在这里应该不是问题,因为我们在 app.json 中提到这是根组件。 App.json 将查找并从那里开始构建应用程序的结构。