我正在尝试使用Expo
和react-native
为某些组件制作演示应用。 (或者我也可以使用常规React-Native
)
我的问题是我无法导入演示应用程序之外的文件
这是我的结构
|-- Components/
| |-- libs
| |-- node_modules
| |-- index.js
| |-- package.json
| |-- demo/
| | |-- node_modules
| | |-- App.js
| | |-- package.json
在demo/App.js
内部,我试图从上层目录导入我的一个组件,但没有运气。所有组件都以./index.js
在App.js
内,我试过:
import {MyComponent} from 'Components'
,import {MyComponent} from '../index'
或import {MyComponent} from '../../Components/'
,但似乎都没有效果。
我收到以下类型的错误Directory /Users/kevin/web/myprojects/Components/index doesn't exist
我做错了什么?
答案 0 :(得分:3)
react-native packager现在的工作方式,它只是在创建JavaScript包时扫描项目的根目录,因此很难做到这一点。
您基本上只需要将文件放在目录的根目录下。有一些工具用于将来自另一个目录的文件同步到根目录下的目录中,因此如果您真的需要,可以使用其中一个。
有些人正在研究如何使符号链接与此一起工作。值得注意的是,你可以从Callstack看看Haul。 https://github.com/callstack-io/haul 但这还没有纳入世博会。
答案 1 :(得分:3)
您可以将根文件夹转换为本地npm软件包...
package.json
name
中设置package.json
字段npm pack
。App.js
的目录npm install ../NAME_OF_TARBALL_THAT_YOU_COPIED
import {MyComponent} from 'NAME_IN_PACKAGE.JSON'
答案 2 :(得分:2)
看一下Metro配置,watchFolder
在此处配置。并且根据其规格是您想要的!
watchFolders
类型:数组
指定任何其他(到projectRoot的)监视文件夹,该文件夹用于知道要监视的文件。
检查以下链接:
https://facebook.github.io/metro/docs/en/configuration#watchfolders
正如我在您的问题中指出的那样,您有2个node_modules
文件夹
拥有多个
node_modules
可能会破坏地铁的编译。
要解决这种情况,请查看Metro配置中的resolver.extraNodeModules
配置。
https://facebook.github.io/metro/docs/en/configuration#extranodemodules
答案 3 :(得分:0)
您可以在演示文件夹中创建一个 rn-cli.config.js 文件,并添加以下代码:
var path = require("path");
var config = {
watchFolders: [
path.resolve(__dirname,"../"),
]
}
module.exports = config;
运行react-native run-android
或react-native start
后,如果看到this,它就可以工作。