试图将 redux 集成到 react 应用程序中。 Webpack 在 store.js 上令人窒息

Posted

技术标签:

【中文标题】试图将 redux 集成到 react 应用程序中。 Webpack 在 store.js 上令人窒息【英文标题】:Trying to integrate redux into react application. Webpack is choking on store.js 【发布时间】:2017-03-06 14:15:20 【问题描述】:

我正在尝试将 redux 集成到现有的 react 应用程序中。我所有的反应代码都在 jsx 文件中。现在我要介绍 redux 和 store.js。在 store.js 上的预期令牌错误上编译 webpack 错误

webpack.config.js

var webpack = require('webpack');
var path = require('path');

var BUILD_DIR = path.resolve(__dirname, 'project/static/public/js');
var APP_DIR = path.resolve(__dirname, 'project/static/public/js/components');


module.exports = 
  entry: APP_DIR + '/App.jsx',
  output: 
    path: BUILD_DIR,
    filename: 'bundle.js'
  ,
  resolve: 
    alias: 
      'react': path.join(__dirname, 'node_modules', 'react')
    
  ,
  module : 
    loaders : [
      
        test : /\.jsx/,
        include : APP_DIR,
        loader : 'babel',
        presets : ['es2015']
      ,
      
        test : /\.js/,
        include : BUILD_DIR,
        exclude : /bundle.js||bundle.js.map||node_modules/,
        loader : 'babel',
        presets : ['es2015']
      
    ]
  ,
  watchOptions: 
    poll: true
  

;

.babelrc


  "presets": [
    "es2015",
    "react"
  ],
  "env": 
    "start": 
      "presets": [
        "react-hmre"
      ]
    
  ,
  "plugins": [
      ["transform-es2015-arrow-functions",  "spec": true ],
      ["transform-class-properties"]
    ]

store.js

import  applyMiddleware, createStore from 'redux';
import combineReducers from './reducers/index.js'


export default createStore(combineReducers)

错误信息

./project/static/public/js/store.js 中的错误 模块解析失败:/home/username/git/project/project/static/public/js/store.js 第 1 行:

意外的令牌 您可能需要适当的加载程序来处理此文件类型。 |从'redux'导入 applyMiddleware,createStore; |从 './reducers/index.js' 导入 combineReducers | @ ./project/static/public/js/components/App.jsx 15:13-32

这些文件经历了多次迭代,试图解决和更好地理解 redux。我认为问题出在我的 webpack 配置上。

【问题讨论】:

对于.js 文件,您只包括BUILD_DIRstore.js 在哪里?我猜它在APP_DIR 下,因为它没有包含在babel-loader 的配置中,所以Webpack 不知道要使用什么加载器。 store.js 位于BUILD_DIR 的根目录中。 project/static/public/js/store.js 【参考方案1】:

你使用的是哪个版本的 Babel?我猜你需要在 webpack 规则中使用 babel-loader。此配置适用于 Babel 7 和 Webpack 4。

WEBPACK 规则:

      
        test: /\.js$/,
        include : BUILD_DIR,
        exclude : /bundle.js||bundle.js.map||node_modules/,
        use: 
          loader: 'babel-loader',
        ,
      ,

和.babelrc文件示例:


  "presets": [[
    "@babel/preset-env", 
      "useBuiltIns": "entry"
    ],
    "@babel/preset-react"],
  "plugins": [
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-proposal-export-default-from",
    "react-hot-loader/babel"
  ]

请记住,您需要安装至少版本 8.0.0、babel core 7.0.0 和 webpack 4.23 的 babel-loader。

但是,我很确定问题是您需要在 webpack 中使用 babel-loader 插件。访问https://github.com/babel/babel-loader

最好的!

【讨论】:

以上是关于试图将 redux 集成到 react 应用程序中。 Webpack 在 store.js 上令人窒息的主要内容,如果未能解决你的问题,请参考以下文章

我应该何时将 Redux 添加到 React 应用程序?

React-redux 操作没有被调度

我试图将顺风集成到 React Js 中,但出现此错误

React Native Auth 与 React Navigation 和 Redux

React-Router-Redux:在“react-router-redux”中找不到导出“syncHistoryWithStore”

React/Redux:如何将此状态从一个组件传递到另一个文件?