- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图理解一些 React Native 源代码中的导入。在文件 questionnaire.actions.js
中,该文件位于相对于顶级目录(名为 lucy-app
)的位置,此处:
./src/containers/newUserOnboarding/questionnaire/questionnaire.actions.js
此 JS 文件包含以下导入:
import api from 'app/src/api';
从上下文中可以清楚地看出,顶级目录被称为 'app'
,因为它包含一个子目录 src
,其中包含 api.js
:
.
├── src
│ ├── api.js
我的问题是:为什么顶级目录被称为app
?这是 React Native 项目的某种默认名称吗? (我查阅了一般 Javascript 文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import ,但找不到原因)。
更新
我注意到顶级目录中的 package.json
包含以下内容:
{
"name": "app",
这显然使目录“可引用”为 app
。但这是如何做到的呢?如果它是执行此操作的依赖项之一,则以下是依赖项:
"dependencies": {
"analytics-react-native": "^1.2.0",
"immutability-helper": "^2.5.0",
"libphonenumber-js": "^1.1.10",
"lodash": "^4.17.4",
"moment": "^2.22.x",
"moment-timezone": "^0.5.x",
"prop-types": "^15.6.0",
"querystring": "^0.2.0",
"raven-for-redux": "^1.3.0",
"react": "^16.2.0",
"react-native": "^0.53.3",
"react-native-android-keyboard-adjust": "^1.1.1",
"react-native-code-push": "^5.3.2",
"react-native-config": "^0.11.5",
"react-native-datepicker": "^1.6.0",
"react-native-intercom": "^11.0.0",
"react-native-keyboard-aware-scroll-view": "^0.4.4",
"react-native-linear-gradient": "^2.4.0",
"react-native-markdown-renderer": "^3.1.0",
"react-native-material-dropdown": "^0.11.1",
"react-native-material-kit": "git://github.com/xinthink/react-native-material-kit#95b0980",
"react-native-material-menu": "^0.2.3",
"react-native-modal": "^4.1.1",
"react-native-onesignal": "^3.0.6",
"react-native-phone-input": "^0.2.1",
"react-native-restart": "^0.0.6",
"react-native-router-flux": "4.0.0-beta.27",
"react-native-sentry": "^0.35.3",
"react-native-smart-splash-screen": "^2.3.5",
"react-native-snackbar": "^0.4.3",
"react-native-swiper": "^1.5.13",
"react-native-vector-icons": "^4.4.0",
"react-navigation": "^1.5.11",
"react-redux": "^5.0.6",
"redux": "^3.7.2",
"redux-devtools-extension": "^2.13.2",
"redux-form": "^7.3.0",
"redux-logger": "^3.0.6",
"redux-persist": "^4.10.1",
"redux-thunk": "^2.2.0",
"reselect": "^3.0.1",
"validator": "^10.2.0"
},
更新2
我将尝试分享我的目录结构的简化版本,因为 tree
命令会生成数万行。这是 lucy-app
上面目录的 ls
:
Kurts-MacBook-Pro-2:lucy2 kurtpeek$ ls
Dockerfile change_db_owner.sh latest.dump lucy-web staging_db_12_July.dump
Procfile crontab lucy-app readme.md
这是lucy-app
的部分树:
└── src
├── actions.js
├── api.js
├── app.js
├── components
│ ├── Headshot
│ │ ├── Headshot.js
│ │ ├── Headshot.styles.js
│ │ └── __tests__
│ │ ├── Headshot-test.js
│ │ └── __snapshots__
│ ├── InfoCard.js
│ ├── __tests__
│ │ ├── InfoCard-test.js
│ │ ├── __snapshots__
│ │ ├── backButtonView-test.js
│ │ ├── markdownView-test.js
│ │ ├── splash-test.js
│ │ ├── text-test.js
│ │ └── webViewModal-test.js
│ ├── backButtonView.js
│ ├── buttons
│ │ ├── ImageButton.js
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── backButton-test.js
│ │ │ ├── button-test.js
│ │ │ ├── imageButton-test.js
│ │ │ ├── intercomButton-test.js
│ │ │ └── textButton-test.js
│ │ ├── backButton.js
│ │ ├── button.js
│ │ ├── button.styles.js
│ │ ├── intercomButton.js
│ │ └── textButton.js
│ ├── guideDialog
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ └── guideDialog-test.js
│ │ ├── guideDialog.js
│ │ └── guideDialog.styles.js
│ ├── initial
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── initial-test.js
│ │ │ └── initialHeader-test.js
│ │ ├── initial.js
│ │ ├── initial.styles.js
│ │ └── initialHeader.js
│ ├── inputs
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── dropdownField-test.js
│ │ │ ├── emailField-test.js
│ │ │ ├── label-test.js
│ │ │ ├── numberField-test.js
│ │ │ ├── phoneField-test.js
│ │ │ ├── textField-test.js
│ │ │ └── wrapField-test.js
│ │ ├── dropdownField.js
│ │ ├── emailField.js
│ │ ├── label.js
│ │ ├── numberField.js
│ │ ├── phoneField.js
│ │ ├── textField.js
│ │ ├── textField.styles.js
│ │ └── wrapField.js
│ ├── markdownView.js
│ ├── splash.js
│ ├── text.js
│ ├── validationMessage
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ └── validationMessage-test.js
│ │ ├── validationMessage.js
│ │ └── validationMessage.styles.js
│ └── webViewModal.js
├── containers
│ ├── changePassword
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── changePassword.reducer-test.js
│ │ │ └── changePassword.ui-test.js
│ │ ├── changePassword.actions.js
│ │ ├── changePassword.container.js
│ │ ├── changePassword.reducer.js
│ │ ├── changePassword.styles.js
│ │ └── changePassword.ui.js
│ ├── forgotPassword
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── forgotPassword.reducer-test.js
│ │ │ └── forgotPassword.ui-test.js
│ │ ├── forgotPassword.actions.js
│ │ ├── forgotPassword.container.js
│ │ ├── forgotPassword.reducer.js
│ │ ├── forgotPassword.styles.js
│ │ └── forgotPassword.ui.js
│ ├── infoCards
│ │ ├── HowToUse.js
│ │ ├── MeetGuide.js
│ │ └── __tests__
│ │ ├── HowToUse-test.js
│ │ ├── MeetGuide-test.js
│ │ └── __snapshots__
│ ├── login
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── login.reducer-test.js
│ │ │ └── login.ui-test.js
│ │ ├── login.actions.js
│ │ ├── login.container.js
│ │ ├── login.reducer.js
│ │ ├── login.selectors.js
│ │ ├── login.styles.js
│ │ └── login.ui.js
│ ├── navigation
│ │ ├── Drawer
│ │ │ ├── Drawer.js
│ │ │ ├── Drawer.styles.js
│ │ │ └── __tests__
│ │ │ ├── Drawer-test.js
│ │ │ └── __snapshots__
│ │ ├── GuideNavBar
│ │ │ ├── GuideNavBar.container.js
│ │ │ ├── GuideNavBar.styles.js
│ │ │ ├── GuideNavBar.ui.js
│ │ │ └── __tests__
│ │ │ ├── GuideNavBar-test.js
│ │ │ └── __snapshots__
│ │ ├── components
│ │ │ ├── BackButton.js
│ │ │ ├── OpenDrawerButton.js
│ │ │ ├── OptionsMenu.js
│ │ │ ├── QuestionnaireMenu.js
│ │ │ └── __tests__
│ │ │ ├── BackButton-test.js
│ │ │ ├── OpenDrawerButton-test.js
│ │ │ ├── OptionsMenu-test.js
│ │ │ ├── QuestionnaireMenu-test.js
│ │ │ └── __snapshots__
│ │ └── navigation.styles.js
│ ├── newUserOnboarding
│ │ ├── activate
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ ├── activate.ui-test.js
│ │ │ │ ├── activationCode.ui-test.js
│ │ │ │ └── email.ui-test.js
│ │ │ ├── activate.actions.js
│ │ │ ├── activate.container.js
│ │ │ ├── activate.reducer.js
│ │ │ ├── activate.styles.js
│ │ │ ├── activate.ui.js
│ │ │ ├── activationCode.ui.js
│ │ │ └── email.ui.js
│ │ ├── activateHelp
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ └── activateHelp.ui-test.js
│ │ │ ├── activateHelp.styles.js
│ │ │ └── activateHelp.ui.js
│ │ ├── activateSuccess
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ └── activateSuccess.ui-test.js
│ │ │ ├── activateSuccess.styles.js
│ │ │ └── activateSuccess.ui.js
│ │ ├── education
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ └── education.ui-test.js
│ │ │ ├── education.styles.js
│ │ │ └── education.ui.js
│ │ ├── loading
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ └── loading.ui-test.js
│ │ │ ├── loading.container.js
│ │ │ ├── loading.styles.js
│ │ │ └── loading.ui.js
│ │ ├── newUserOnboarding.reducer.js
│ │ ├── notificationPermissions
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ └── notificationPermissions.ui-test.js
│ │ │ ├── notificationPermissions.container.js
│ │ │ └── notificationPermissions.ui.js
│ │ ├── questionnaire
│ │ │ ├── addressForm
│ │ │ │ ├── __tests__
│ │ │ │ │ └── addressForm-test.js
│ │ │ │ ├── addressForm.actions.js
│ │ │ │ ├── addressForm.container.js
│ │ │ │ ├── addressForm.styles.js
│ │ │ │ └── addressForm.ui.js
│ │ │ ├── components
│ │ │ │ ├── __tests__
│ │ │ │ │ ├── __snapshots__
│ │ │ │ │ ├── questionnaireFooter-test.js
│ │ │ │ │ ├── questionnaireHeader-test.js
│ │ │ │ │ └── questionnaireMenu-test.js
│ │ │ │ ├── questionnaireFooter.js
│ │ │ │ ├── questionnaireHeader.js
│ │ │ │ └── questionnaireMenu.js
│ │ │ ├── questionnaire.actions.js
│ │ │ ├── questionnaire.container.js
│ │ │ ├── questionnaire.reducer.js
│ │ │ ├── questionnaire.selectors.js
│ │ │ ├── questionnaire.styles.js
│ │ │ ├── questionnaire.ui.js
│ │ │ └── questions
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ ├── booleanQuestion-test.js
│ │ │ │ ├── dateQuestion-test.js
│ │ │ │ ├── multiSelectQuestion-test.js
│ │ │ │ ├── questionWrapper-test.js
│ │ │ │ ├── selectQuestion-test.js
│ │ │ │ └── textQuestion-test.js
│ │ │ ├── booleanQuestion.ui.js
│ │ │ ├── dateQuestion.ui.js
│ │ │ ├── multiSelectQuestion.ui.js
│ │ │ ├── optionalMessage.ui.js
│ │ │ ├── questionWrapper.ui.js
│ │ │ ├── selectQuestion.ui.js
│ │ │ └── textQuestion.ui.js
│ │ ├── questionnaireIntro
│ │ │ ├── __tests__
│ │ │ │ ├── __snapshots__
│ │ │ │ └── questionnaireIntro.ui-test.js
│ │ │ ├── questionnaireIntro.container.js
│ │ │ ├── questionnaireIntro.styles.js
│ │ │ └── questionnaireIntro.ui.js
│ │ └── setAccount
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── email.ui-test.js
│ │ │ ├── password.ui-test.js
│ │ │ └── setAccount.ui-test.js
│ │ ├── email.ui.js
│ │ ├── password.ui.js
│ │ ├── setAccount.actions.js
│ │ ├── setAccount.container.js
│ │ ├── setAccount.reducer.js
│ │ ├── setAccount.styles.js
│ │ └── setAccount.ui.js
│ ├── profile
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── profile.reducer-test.js
│ │ │ └── profile.ui-test.js
│ │ ├── profile.actions.js
│ │ ├── profile.constants.js
│ │ ├── profile.container.js
│ │ ├── profile.reducer.js
│ │ ├── profile.styles.js
│ │ ├── profile.ui.js
│ │ ├── profileForm
│ │ │ ├── __tests__
│ │ │ │ └── profileForm-test.js
│ │ │ ├── profileForm.container.js
│ │ │ ├── profileForm.selectors.js
│ │ │ ├── profileForm.styles.js
│ │ │ └── profileForm.ui.js
│ │ └── profileSaveButton
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ └── profileSaveButton-test.js
│ │ └── profileSaveButton.js
│ ├── session
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── session-test.js
│ │ │ └── session.reducer-test.js
│ │ ├── components
│ │ │ ├── SessionDescription.js
│ │ │ ├── SessionFooter.js
│ │ │ ├── SessionHeader.js
│ │ │ ├── SessionTimesModal.js
│ │ │ └── __tests__
│ │ │ ├── SessionDescription-test.js
│ │ │ ├── SessionFooter-test.js
│ │ │ ├── SessionHeader-test.js
│ │ │ ├── SessionTimesModal-test.js
│ │ │ └── __snapshots__
│ │ ├── session.actions.js
│ │ ├── session.constants.js
│ │ ├── session.container.js
│ │ ├── session.reducer.js
│ │ ├── session.selectors.js
│ │ ├── session.styles.js
│ │ └── session.ui.js
│ └── timeline
│ ├── __tests__
│ │ ├── __snapshots__
│ │ ├── fixtures
│ │ │ └── timeline-fixture.js
│ │ ├── timeline-test.js
│ │ └── timeline.reducer-test.js
│ ├── components
│ │ ├── __tests__
│ │ │ ├── __snapshots__
│ │ │ ├── checkIn-test.js
│ │ │ └── feedback-test.js
│ │ ├── checkIn.ui.js
│ │ ├── feedback.styles.js
│ │ └── feedback.ui.js
│ ├── timeline.actions.js
│ ├── timeline.container.js
│ ├── timeline.reducer.js
│ ├── timeline.styles.js
│ └── timeline.ui.js
├── hocs
│ ├── __tests__
│ │ ├── __snapshots__
│ │ └── withValidationMessage-test.js
│ └── withValidationMessage.js
├── images
├── lib
│ ├── __tests__
│ │ └── lodashMixins-test.js
│ ├── analytics.js
│ ├── customMarkdownRules.js
│ ├── inputValidations.js
│ ├── lodashMixins.js
│ ├── loggingHelpers.js
│ ├── requestHelpers.js
│ └── utils.js
├── reducers.js
├── router.js
├── scenes.js
├── store
│ └── configureStore.js
├── styles
│ ├── colors.js
│ ├── common.js
│ └── styles.js
└── test-config
├── enzyme-config.js
└── setup.js
最佳答案
这不是 React Native 项目的默认名称,而可能只是一种约定或习惯。您可以坚持使用不同类型的目录结构方法,也可以使用 React Community 中的 create-react-native-app
并检查该工具如何创建目录结构。提示:没有目录结构:)所以,一切都完全取决于你。
当然这只是基本结构,根据您的需要(例如actions、Redux的reducers目录(如果您将使用的话)、config、api等)您可以组织自己的目录。
关于javascript - 在 React Native 项目中,为什么导入中的顶级目录被称为 'app' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51371237/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!