ES6导入/导出不符合预期

时间:2017-08-23 12:41:18

标签: javascript reactjs react-native babeljs es6-modules

我不确定它的反应本机是否相关,但那些是我的版本:

"react-native": "0.46.4", "babel-preset-react-native": "2.1.0",

// src/utils/a.js
export default 'a file works!'

// src/utils/b.js
export default 'b file works!'

// src/utils/index.js
import a from './a'
import b from './b'

export { a, b }

基本上当我尝试:

import * as utils from 'src/utils'
// or
import { a, b } from 'src/utils'

它返回未定义的“a”和“b”属性,如

utils = { a: undefined, b: undefined }

我不知道我在这里做错了什么,我的猜测是那些a/b.js个文件在它们应该加载时没有加载,我之前做过的一个hack就是在一个监听器函数utils.auth上,我必须if (auth && auth.listener),这是有效的,因为当应用程序启动时,监听器是未定义的,但在它成为预期之后就会立即生效。

编辑: 看来,如果我尝试:

// src/utils/index.js
const a = 'a works'
const b = 'b works'

export { a, b }

结果是一样的。

4 个答案:

答案 0 :(得分:2)

您基本上可以导出文件而无需导入文件。

查看我的components文件夹中的index.js:

export {Content} from './Content'
export {FilterSelect} from './FilterSelect'
export {ListItem} from './ListItem'
export {Searchbar} from './Searchbar'
export {Sidebar} from './Sidebar'
export {RequiredArgument} from './RequiredArgument'
export {Loading} from './Loading'
export {ArgumentProvided} from './ArgumentProvided'
export {OverviewBar} from './OverviewBar'
export {Home} from './Home'
export {Layout} from './Layout'

这就是我导入它们的方式

import { Content, FilterSelect, ListItem, Searchbar, Sidebar, Loading, RequiredArgument, ArgumentProvided, OverviewBar} from './components/index.js'
import Layout from './components/Layout''

答案 1 :(得分:2)

似乎在这里工作:

https://www.webpackbin.com/bins/-KsEA7P7lKOuBugEy1jd

您确定您拥有所有必需的babel预设吗? (ES2015,STAGE-0,..)

此外,您可能会尝试以这种方式导出:

import _a from './a'
import _b from './b'

export { _a as a, _b as b }

答案 2 :(得分:1)

在导入文件中,您在'src'

之前缺少'./'
import * as utils from './src/utils'
// or
import { a, b } from './src/utils'

答案 3 :(得分:0)

谢谢你的帮助。 所以我发现有用的是:

import a from 'src/utils/a'

正如@loganfsmyth所说,发生这种情况是因为当我尝试加载utilsa仍在加载。仍然不确定它是否与react-native模块导入或其他东西有关。