
在现代javascript应用开发中,es6模块(ecmascript 2015 modules)是组织和重用代码的核心机制。它们允许开发者将代码拆分为独立的模块,并通过import和export语句进行依赖管理。然而,不正确地使用这些语句常常会导致模块解析错误,其中一个典型示例便是“export 'name' was not found”错误。
ES6模块主要有两种导出方式:默认导出(Default Export)和命名导出(Named Export)。
默认导出 (export default)
示例:
// module.js
const myDefaultFunction = () => console.log('This is the default export.');
export default myDefaultFunction;
// anotherModule.js
import someFunction from './module.js'; // 'someFunction' 是任意名称
someFunction(); // 输出: This is the default export.命名导出 (export { name } 或 export const name)
示例:
// module.js
export const PI = 3.14159;
export function add(a, b) { return a + b; }
// anotherModule.js
import { PI, add } from './module.js';
console.log(PI); // 输出: 3.14159
console.log(add(1, 2)); // 输出: 3
// 也可以使用别名导入
import { PI as MathPI, add as sum } from './module.js';
console.log(MathPI);我们来看一个具体的错误场景,它通常发生在尝试导入Redux store时:
store.js 文件 (Redux Store 配置)
import { configureStore } from '@reduxjs/toolkit';
import userReducer from '../features/userSlice';
// 这里使用了默认导出
export default configureStore({
reducer: {
user: userReducer,
},
});index.js 文件 (应用入口)
import React from 'react';
import { createRoot } from 'react-dom/client';
import { Provider } from 'react-redux';
import { store } from './app/store'; // <--- 错误发生在这里
import App from './App';
import reportWebVitals from './reportWebVitals';
import './index.css';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
reportWebVitals();当运行上述代码时,会遇到如下错误:
ERROR in ./src/index.js 16:11-16 export 'store' (imported as 'store') was not found in './app/store' (possible exports: default)
这个错误信息非常明确地指出了问题所在:
这意味着index.js文件尝试以命名导入的方式 (import { store } from ...) 去获取一个在store.js中以默认导出 (export default ...) 方式导出的内容。这两种导入/导出方式是不匹配的。
要解决这个问题,只需将index.js中的导入语句从命名导入改为默认导入即可。
index.js 文件 (修正后)
import React from 'react';
import { createRoot } from 'react-dom/client';
import { Provider } from 'react-redux';
import store from './app/store'; // <--- 修正:使用默认导入
import App from './App';
import reportWebVitals from './reportWebVitals';
import './index.css';
const container = document.getElementById('root');
const root = createRoot(container);
root.render(
<React.StrictMode>
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>
);
reportWebVitals();通过将import { store } from './app/store';改为import store from './app/store';,我们正确地导入了store.js文件中默认导出的configureStore结果。此时,store变量将持有Redux store的实例,应用将能够正常运行。
“export 'name' was not found”错误是ES6模块导入导出机制中一个常见的陷阱,尤其是在默认导出和命名导出之间混淆时。核心在于理解并匹配导出方和导入方的语法。当一个模块使用export default导出时,导入方必须使用import name from 'module'的默认导入语法;而当使用export const name或export { name }进行命名导出时,导入方则需要使用import { name } from 'module'的命名导入语法。遵循这些基本原则,可以有效避免此类模块解析错误,确保应用的顺利运行。
以上就是ES6模块导入导出:默认导出与命名导出的正确使用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号