Redux: Por que "combinReduers" não pode funcionar no meu projeto hoje de repente, que poderia funcionar bem ontem?

Criado em 29 abr. 2016  ·  19Comentários  ·  Fonte: reduxjs/redux

importar {combineReducers} de 'redux'
import {routerReducer as router} de 'react-router-redux'
contador de importação de './modules/counter'
import docManage de './doc'

export default combineReducers ({// ocorreu um erro
balcão,
docManage,
roteador
})
TypeError não capturado: (0, _redux.combineReducers) não é um functionObject.defineProperty.value @ rootReducer.js: 6__webpack_require__ @ bootstrap 8921782a133419f3cb76: 585fn @ bootstrap 8921782b76: 1093419fexc. esModule @ index.js: 6__webpack_require @ bootstrap 8921782a133419f3cb76: 585fn @ bootstrap 8921782a133419f3cb76: 109 (função anônima) @ wrapActionCreators.js: 6__webpack_require__376921392 bootstrap1793492bbbbport: 581334a134192 bootstrap 89217534a1334192 @ bootstrap 89217534a133419817821392 bootnstrap17821392 esModule @ connect.js: 18__webpack_require @ bootstrap 8921782a133419f3cb76: 585fn @ bootstrap 8921782a133419f3cb76: 109exports. esModule @ index.js: 10__webpack_require @ inicialização 8921782a133419f3cb76: 585fn @ inicialização 8921782a133419f3cb76: 109 (função anônima) @ inicialização 8921782a133419f3cb76: 631__webpack_require__ @ inicialização 8921782a133419f3cb76: 585 (função anônima) @ inicialização 8921782a133419f3cb76: 631 (função anônima) @ inicialização 8921782a133419f3cb76: 631

Comentários muito úteis

@caojinli

Quando executo npm install dentro dele, recebo

npm WARN EJSONPARSE Failed to parse json
npm WARN EJSONPARSE Unexpected end of input at 171:2
npm WARN EJSONPARSE 
npm WARN EJSONPARSE ^

Isso significa que package.json está quebrado. Se olharmos para package.json , a seção scripts termina abruptamente:

    "deploy": "better-npm-run deploy",
    "flow:check": "babel-node bin/flow-check",
    "codecov": "cat coverage/*/lcov.info | codecov"
  ,
  "betterScripts": {

Encontrei o local exato do erro com http://jsonlint.com/ que formata JSON.
Depois de adicionar } antes da vírgula, consegui executar npm install .

Depois de executar npm start , obtive este:

ERROR in ./src/redux/actions/manageDoc.js
Module not found: Error: Cannot resolve module 'isomorphic-fetch' in /Users/dan/p/prodoc/src/redux/actions
 @ ./src/redux/actions/manageDoc.js 23:23-50

Eu corri

npm install --save isomorphic-fetch

para fixar isso.

Finalmente, depois de executar npm start novamente, recebi o erro que você descreveu:

rootReducer.js:6 Uncaught TypeError: (0 , _redux.combineReducers) is not a function
Head.js:66 Uncaught TypeError: (0 , _reactRedux.connect) is not a function

Acontece que você tem a opção resolve.root Webpack habilitada que permite importar módulos por seus caminhos relativos à pasta raiz . O problema é que você tem uma pasta chamada redux em seu projeto, então agora todas as importações de redux resolvidas para aquela pasta ao invés do Redux real.

Remover resolve.root da configuração do Webpack corrige o problema.

No futuro, preferiríamos que você fizesse perguntas como essa no StackOverflow, não no rastreador de problemas do Redux. Redux é uma biblioteca muito específica, mas seus problemas parecem estar relacionados ao uso de uma mistura de 20 tecnologias que você usa em conjunto sem um conhecimento profundo de como cada uma delas funciona. Pessoalmente, não entendo muito do que está acontecendo nas configurações desse projeto, então não usaria este exemplo ao mesmo tempo que estou aprendendo uma biblioteca como o Redux. Não requer nenhuma configuração.

Copiar e colar configurações de projetos padronizados sempre leva a problemas difíceis de depurar como este. É fácil perder as decisões de configuração de alguém quando não é você quem as toma. Não use projetos clichê a menos que você entenda cada uma das tecnologias que eles usam!

Você não precisa de um boilerplate para começar a aprender Redux. Se você quer apenas começar a aprender Redux, copie esta página HTML e comece a aprender! Você sempre pode olhar para todos esses outros projetos mais tarde, quando estiver mais confortável com o Redux e outras bibliotecas.

Todos 19 comentários

Oi! Infelizmente, esta informação não é suficiente para ajudá-lo. Forneça um projeto reproduzindo o problema.

Estou encerrando porque não há informações suficientes aqui e provavelmente é um problema de uso. Consulte os exemplos para ver o uso correto.

O que posso dar mais informações é que adicionei algum módulo por "npm" como thunk. então ocorreu um erro.

Forneça um projeto reproduzindo o problema. Não consigo encontrar uma maneira de reproduzir isso, então, infelizmente, não tenho como ajudá-lo.

Não consigo anexar meu projeto compactado de cerca de 606 KB, devido ao erro do git "Algo deu muito errado e não podemos processar esse arquivo.". Existe outra maneira de anexar meu projeto?

"Algo deu muito errado e não podemos processar esse arquivo." Quando tento anexar o código do meu projeto, há outra maneira de anexar o código?

Exclua node_modules dele se estiver lá.

Você pode criar um repositório no GitHub e colocá-lo lá em vez de anexá-lo.

Depois de inserir "npm publish", console me responda "+ [email protected] ", acho que meu projeto foi atualizado no github agora, mas não posso pesquisá-lo no github, não sei por quê.

npm ERR! estranho: [email protected] D: \ react \ react-redux-starter-kitnode_modules \ inline-style-prefixer
npm ERR! estranho: [email protected] D: \ react \ react-redux-starter-kitnode_modules \ isomorphic-fetch
npm ERR! estranho: [email protected] D: \ react -redux-starter-kitnode_moduleskeycode
npm ERR! estranho: lodash. [email protected] D: \ react \ react-redux-starter-kitnode_modules \ lodash.merge
npm ERR! estranho: lodash. [email protected] D: \ react \ react-redux-starter-kitnode_modules \ lodash.throttle
npm ERR! estranho: [email protected] D: \ react \ react-redux-starter-kitnode_modules \ react-event-listener
npm ERR! estranho: [email protected] D: \ react \ react-redux-starter-kitnode_modules \ recompose
npm ERR! estranho: [email protected] D: \ react \ react-redux-starter-kitnode_modules \ redux-logger
npm ERR! estranho: [email protected] D: \ react \ react-redux-starter-kitnode_modules \ simple-assign
npm ERR! estranho: [email protected] D: \ react \ react-redux-starter-kitnode_modules \ whatwg-fetch

@caojinli : até agora, parece que você tentou publicar seu repositório como um pacote NPM, não criar um repositório no Github e disponibilizá-lo. Além disso, esses avisos "estranhos" não têm nada a ver com Redux - é o NPM dizendo que há uma incompatibilidade entre quais pacotes estão em node_modules e o que está listado em seu package.json.

O projeto estava localizado na URL https://github.com/caojinli/prodoc , quem pode obter meu projeto com o erro "combinReduer"? Muito obrigado.

@markerikson Eu publiquei meu projeto no github ainda e gostaria que você pudesse fornecer uma ajuda gentil, obrigado.

@caojinli

Quando executo npm install dentro dele, recebo

npm WARN EJSONPARSE Failed to parse json
npm WARN EJSONPARSE Unexpected end of input at 171:2
npm WARN EJSONPARSE 
npm WARN EJSONPARSE ^

Isso significa que package.json está quebrado. Se olharmos para package.json , a seção scripts termina abruptamente:

    "deploy": "better-npm-run deploy",
    "flow:check": "babel-node bin/flow-check",
    "codecov": "cat coverage/*/lcov.info | codecov"
  ,
  "betterScripts": {

Encontrei o local exato do erro com http://jsonlint.com/ que formata JSON.
Depois de adicionar } antes da vírgula, consegui executar npm install .

Depois de executar npm start , obtive este:

ERROR in ./src/redux/actions/manageDoc.js
Module not found: Error: Cannot resolve module 'isomorphic-fetch' in /Users/dan/p/prodoc/src/redux/actions
 @ ./src/redux/actions/manageDoc.js 23:23-50

Eu corri

npm install --save isomorphic-fetch

para fixar isso.

Finalmente, depois de executar npm start novamente, recebi o erro que você descreveu:

rootReducer.js:6 Uncaught TypeError: (0 , _redux.combineReducers) is not a function
Head.js:66 Uncaught TypeError: (0 , _reactRedux.connect) is not a function

Acontece que você tem a opção resolve.root Webpack habilitada que permite importar módulos por seus caminhos relativos à pasta raiz . O problema é que você tem uma pasta chamada redux em seu projeto, então agora todas as importações de redux resolvidas para aquela pasta ao invés do Redux real.

Remover resolve.root da configuração do Webpack corrige o problema.

No futuro, preferiríamos que você fizesse perguntas como essa no StackOverflow, não no rastreador de problemas do Redux. Redux é uma biblioteca muito específica, mas seus problemas parecem estar relacionados ao uso de uma mistura de 20 tecnologias que você usa em conjunto sem um conhecimento profundo de como cada uma delas funciona. Pessoalmente, não entendo muito do que está acontecendo nas configurações desse projeto, então não usaria este exemplo ao mesmo tempo que estou aprendendo uma biblioteca como o Redux. Não requer nenhuma configuração.

Copiar e colar configurações de projetos padronizados sempre leva a problemas difíceis de depurar como este. É fácil perder as decisões de configuração de alguém quando não é você quem as toma. Não use projetos clichê a menos que você entenda cada uma das tecnologias que eles usam!

Você não precisa de um boilerplate para começar a aprender Redux. Se você quer apenas começar a aprender Redux, copie esta página HTML e comece a aprender! Você sempre pode olhar para todos esses outros projetos mais tarde, quando estiver mais confortável com o Redux e outras bibliotecas.

@gaearon Em primeiro lugar, muito obrigado, aprendi muito com a sua resposta.
Se eu desabilitar resolve.root do arquivo de configuração do webpack, recebo alguns novos erros que poderiam funcionar bem anteriormente.
ERRO em ./src/redux/configureStore.js
Módulo não encontrado: Erro: Não é possível resolver o módulo 'containers / DevTools' em D: \ react \ react-redux-starter-kit \ srcredux
@ ./src/redux/configureStore.js 29: 75-105

ERRO em ./src/containers/Root.js
Módulo não encontrado: Erro: Não é possível resolver o módulo 'containers / DevTools' em D: \ react \ react-redux-starter-kit \ srccontainers
@ ./src/containers/Root.js 120: 25-55

ERRO em ./src/routes/index.js
Módulo não encontrado: Erro: Não é possível resolver o módulo 'layouts / CoreLayout / CoreLayout' em D: \ react \ react-redux-starter-kit \ src \ routes
@ ./src/routes/index.js 13: 18-58

ERRO em ./src/routes/index.js
Módulo não encontrado: Erro: Não é possível resolver o módulo 'views / HomeView / HomeView' em D: \ react \ react-redux-starter-kit \ src \ routes
@ ./src/routes/index.js 17: 16-50

ERRO em ./src/routes/index.js
Módulo não encontrado: Erro: Não é possível resolver o módulo 'views / HomeView / teacher' em D: \ react \ react-redux-starter-kit \ src \ routes
@ ./src/routes/index.js 21: 16-50

ERRO em ./src/routes/index.js
Módulo não encontrado: Erro: Não é possível resolver o módulo 'views / HomeView / docView' em D: \ react \ react-redux-starter-kit \ src \ routes
@ ./src/routes/index.js 25: 15-48

Além disso, renomeei a pasta redux do meu projeto depois de ler sua resposta ao viod o que você mencionou que o programa usará "redux" errado em vez de "redux" real. mas infelizmente ainda não consigo executá-lo mesmo tendo renomeado a pasta de redux.

@gaearon Eu redux de src , então não posso desabilitá-lo.

Se eu desabilitar resolve.root do arquivo de configuração do webpack, recebo alguns novos erros que poderiam funcionar bem anteriormente.

Sim, porque você não pode mais usar caminhos absolutos que são resolvidos automaticamente. Este é o ponto principal - você deve

  • renomeie sua pasta com um nome diferente de redux para que resolve.root não atrapalhe ou
  • mude todas as suas importações para serem relativas (por exemplo, ../views/HomeView/docView vez de views/HomeView/docView ).

Você não pode ter uma pasta chamada redux e a opção resolve.root e esperar que isso funcione.

@gaearon Copiei meus códigos de negócios (incluindo views, reduxs-reducers, componentes, containers e etc) para outro projeto que poderia funcionar muito bem, usando a mesma configuração (download do github), o projeto funcionando muito bem teve o mesmo erro. Se eu removesse meus códigos de negócios dele e o projeto funcionasse muito bem novamente. Então, atrevo-me a dizer que foi causado pelo meu código de negócios. nada relacionado a configuração do webpack e havia uma pasta de redux no meu src.

Se você vir este erro exato:

rootReducer.js:6 Uncaught TypeError: (0 , _redux.combineReducers) is not a function
Head.js:66 Uncaught TypeError: (0 , _reactRedux.connect) is not a function

Não há como isso ser causado por seu código de negócios. Este é o erro causado pela configuração de resolve.root . redux fornece essas exportações, portanto, a única maneira de obter esse erro é resolver redux para algo diferente de seu pacote npm.

Obviamente, quaisquer outros erros podem ter origens diferentes.

Esta página foi útil?
0 / 5 - 0 avaliações