#reactjs #npm #webpack #react-redux #create-react-app
#reactjs #npm #webpack #реагирование-redux #create-react-app
Вопрос:
После запуска я получаю следующую ошибку npm build run
, которая исчезает после удаления строки с оператором распространения:
> react-scripts build
Creating an optimized production build...
Failed to compile.
./src/Footer.js
Attempted import error: 'getText' is not exported from './Getters'.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! test-redux-app@0.1.0 build: `react-scripts build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the test-redux-app@0.1.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additi
onal logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/myName/.npm/_logs/2020-08-24T22_14_07_926Z-deb
ug.log
- App.js (основное приложение очищено от
npx create-react-app my-app --template redux
) - Footer.js (Компонент)
- Getters.js (файл селектора)
App.js
import React from 'react';
import Footer from './Footer';
import { getText } from './Getters';
function App() {
return <Footer/>
}
export default App;
Footer.js
import React from 'react';
import { useSelector } from 'react-redux';
import { getText } from './Getters';
function Footer(){
let text = useSelector( state =>
getText( state, 'menuName' )
)
return <h1>{text}</h1>;
}
export default Footer;
Getters.js
let Getters = {}
Getters.thisFunctionIsCausingTrouble = function( state, tableName ){
let toRet = { ...state };
return toRet;
}
Getters.getText = function( state ){
return 'Text';
}
module.exports = Getters;
На localhost все работает отлично, но когда я пытаюсь собрать, это просто облажается.
Опять же, когда я удаляю оператор распространения другой функции, она выполняется нормально.
Еще один странный результат заключается в том, что если я удаляю вызов import Footer
и нижнего колонтитула из приложения, я получаю успешную сборку. ( getText
Импорт остается в App.js
режиме).
Почему сборка завершается неудачно?
package.json
{
"name": "test-redux-app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@reduxjs/toolkit": "^1.1.0",
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"react": "^16.13.1",
"react-dom": "^16.13.1",
"react-redux": "^7.1.3",
"react-scripts": "3.4.3"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
Ответ №1:
Преобразование экспорта из es6 в .jsx. module.exports — это версия экспорта es6. У меня была похожая проблема. Исправлено путем добавления экспорта перед именем функции. пример: export const getheader = () => {…}
тогда вы должны быть в состоянии импортировать его таким, каким вы являетесь в данный момент.
Комментарии:
1. module.exports — это CommonJS, а не ES6, хотя ваше предложение переключиться на синтаксис ESM и именованный экспорт полностью соответствует действительности!