javascript - Webpack 别名似乎在 CRA 应用程序的 .js 文件中不起作用
问题描述
我webpack.config.js
在我的 CRA 项目中使用 a,如下所示:
const path = require('path');
module.exports = {
resolve: {
alias: {
'components': path.resolve(__dirname, 'src/components'),
'containers': path.resolve(__dirname, 'src/containers'),
'images': path.resolve(__dirname, 'src/images'),
'styles': path.resolve(__dirname, 'src/styles'),
'utils': path.resolve(__dirname, 'src/utils'),
},
extensions: ['.jsx', '.js', '.scss', '.json'],
},
};
这样我就可以使用这样的项目结构:
src
components
...
containers
c1
c1.jsx
c1.scss
c2
c2.jsx
c2.scss
index.js
images
...
styles
...
utils
...
wherecontainers
是文件夹内的src
文件夹,c1
是c2
包含组件.jsx
和.scss
文件的文件夹(或此示例中的容器),并且index.js
是成功导出containers
文件夹内所有容器以在其他组件中使用的文件,如下所示:
import { c1 } from 'containers';
上面的代码适用于我创建的所有.jsx
文件,但此时在项目中我创建了一个utils
名为的文件routes.js
,该文件需要导入一个容器。但是,使用上面的行我得到以下错误:
expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports
代码指向了我必须使用容器的地方,所以我想到了将文件中的行更改为相对导入:
import { c1 } from '../containers/c1/c1';
那行得通。但是(如果我错了,请纠正我)中.js
声明的扩展名不应该webpack.config.js
使别名能够在我的文件上工作吗?我是否遗漏了什么我应该添加以启用文件中的别名而不是.jsx
?请让我知道,并提前感谢您的帮助。
编辑:容器(如c1.jsx
)声明如下:
export function c1() {
return (
<div>example</div>
);
}
然后文件夹index.js
里面是containers
这样的:
export { c1 } from ‘./c1/c1’;
export { c2 } from ‘./c2/c2’;
编辑#2:似乎将代码更改为此import { c1 } from 'containers/c1/c1';
可以正常工作,所以真正的问题是routes.js
无法识别索引文件
解决方案
推荐阅读
- c++ - 如何在 Visual Studio 的 cmake 项目中设置 PATH 变量?
- javascript - 基于光标位置的固定区域
- html - lxml 相对 xPath 不返回相对于给定 HtmlElement 的结果
- apollo - Apollo Server - 当类型在命名空间中不可用时如何在解析器中创建和添加对象
- amazon-web-services - 外部架构是否计入 9,900 架构的 Redshift 配额?
- swiftui - SwiftUI GeometryReader 未能更新其父级的状态
- java - 如果我的玩家可以在回合制游戏中以 x 个动作结束,我应该如何计算每个可能的终点?
- eclipse - 发布到 Glassfish 服务器卡在 15% 并且所有其他进度都被阻止
- azure - 带有 KMSI 的 Azure 广告 b2c 自定义策略,自动登录在浏览器关闭后不起作用
- c# - 同时从多个程序连接到 COM 设备