Javascript 需要react native中的模块

Javascript 需要react native中的模块,javascript,ios,node.js,reactjs,react-native,Javascript,Ios,Node.js,Reactjs,React Native,我在一个项目中遇到了一个问题。我正在尝试创建一个通用的require文件,在其中导出所有模块。之后,我只需要我的“require.js”文件,以避免在每个文件中调用类似require('../../ModuleName') 我有4个文件: index.ios.js /app/home.js /app/MyView.js /app/require.js require.js: module.exports = { Home: require('./home'), MyView:

我在一个项目中遇到了一个问题。我正在尝试创建一个通用的require文件,在其中导出所有模块。之后,我只需要我的“require.js”文件,以避免在每个文件中调用类似require('../../ModuleName')

我有4个文件:

index.ios.js
/app/home.js
/app/MyView.js
/app/require.js
require.js:

module.exports = {

    Home: require('./home'),
    MyView: require('./MyView')

}
在index.ios.js中(Home和MyView模块正确导入)

“严格使用”;
var React=require('React-native');
变量{
评估学,
样式表,
文本,
看法
}=反应;
变量{
家,
MyView
}=要求('./应用程序/要求');
类测试\u需要扩展React.Component{
render(){
返回(
);
}
}
AppRegistry.registerComponent('Test_require',()=>Test_require');
Home.js(模块MyView未被导入)

“严格使用”;
var React=require('React-native');
变量{
看法
正文
}=反应;
变量{
MyView
}=要求('./要求');
类Home扩展了React.Component{
render(){
console.log(MyView);
返回(
);
}
}
module.exports=Home;
在Home.js中,MyView变量为“未定义”。如果我想在一个模块中需要一个已经导入到另一个文件中的模块,那么该变量是未定义的


你们知道我为什么可以这样做吗?或者有更好的解决办法吗?谢谢你提供的任何线索,所以我将发布我自己的答案,以防其他人也有同样的问题

在这样的语法中,所需的文件是同步加载的。因此,如果组件的构建速度快于需要文件的速度,则会出现此问题。可以在需要时使组件延迟加载,也可以像这样使用es6导入语法(异步导入加载):


干杯

在文件头注释中添加
@providesmodulename
。您可以使用require('moduleName')在项目的其他位置导入。
看看这个。

顺便说一句,为什么如此惊人的功能从未在任何地方记录下来?

这是一个很古老的功能,但记录需要更正。Require不是异步的。通过检查返回的对象(而不是承诺),可以很容易地看出这一点

在ES6中重新导出很简单

例如:

export * from './types';
export { default as ApiClient } from './ApiClient';

你是说
require
是同步的,
import
是异步的?这不是ES语法的唯一区别吗?这不是唯一的区别,但在我的例子中,这是我问题的解决方案/原因。也许这个链接让我看到的主题更加清晰,我的评论中的链接被破坏了,所以如果有人正在寻找解决方案,请看一看
'use strict';

var React = require('react-native');

var {
    View,
    Text
} = React;

var {
    MyView
} = require('./require');

class Home extends React.Component {

    render() {
        console.log(MyView);
        return(
            <MyView />
        );
    }

}

module.exports = Home;
import React from 'react-native'
export * from './types';
export { default as ApiClient } from './ApiClient';