大家好,我只想知道cra-app中从“反应”导入反应的机制,但是对于我的组件,我必须通过概括地定义组件文件的路径来导入它,为什么会有您的两个陈述之间的差异
import React, { Component } from 'react';
import Button from './Button';
预先感谢
答案 0 :(得分:2)
这是因为React在内部使用Webpack来解析模块。在首次导入import React, { Component } from 'react';
的过程中,Webpack将在node_modules
文件夹中查找该库,因为它已为此配置了resolver
。
在第二种情况下,您需要使用简短的名称(例如“ ./Button
”提及路径button'
或路径webpack.config.js
,以告诉Webpack在{{1}内的目录中搜索/解析的位置。 }。
对于使用create-react-app创建的应用,webpack.config.js
将位于node_modules/react-scripts/config/webpack.config.js
。
您会注意到定义了此解析器,该解析器告诉Webpack在哪里寻找核心库:
resolve: {
// This allows you to set a fallback for where Webpack should look for modules.
// We placed these paths second because we want `node_modules` to "win"
// if there are any conflicts. This matches Node resolution mechanism.
// https://github.com/facebook/create-react-app/issues/253
modules: ['node_modules'].concat(
// It is guaranteed to exist because we tweak it in `env.js`
process.env.NODE_PATH.split(path.delimiter).filter(Boolean)
),
...
}
要为自己的路径添加别名,您可以在使用config/webpack.config.js
退出应用程序后,在npm run eject
中的文件中定义一个新别名(您不能撤消此操作):
resolve: {
alias: {
'components' : path.resolve(__dirname, '../src/Components')
}
}
};
在组件中,您可以像这样导入:
import Button from 'components/Button';
答案 1 :(得分:1)
react
是通过npm
安装到node_mudules
中的软件包,可以通过软件包名称导入。
Button
是您的自定义组件,因此必须通过其路径导入。如果您将Button
打包成一个软件包,则也可以通过npm安装它。