当前位置: 首页 > 知识库问答 >
问题:

升级webpack4 WebPack-合并反应问题

文英达
2023-03-14

我一直在尝试将React项目更新到webpack4,但无论配置还是Advise/Solution,我尝试它仍然是错误的。

我当前有以下设置:

package.json

{
  "name": "PROJECTNAME",
  "version": "1.0.13",
  "description": "DESC",
  "main": "index.js",
  "engines": {
    "node": "8.2.1"
  },
  "scripts": {
    "build": "webpack --config webpack.prod.js --progress",
    "dev": "webpack-dev-server --config webpack.dev.js --open --hot --watch"
  },
  "keywords": [],
  "author": "AUTHOR",
  "license": "MIT",
  "resolve": {
    "extensions": [
      ".js",
      ".scss"
    ]
  },
  "dependencies": {
    "@fortawesome/fontawesome": "^1.1.8",
    "@fortawesome/fontawesome-svg-core": "^1.2.2",
    "@fortawesome/free-regular-svg-icons": "^5.2.0",
    "@fortawesome/free-solid-svg-icons": "^5.2.0",
    "@fortawesome/react-fontawesome": "^0.1.0",
    "ajv": "^6.5.2",
    "ajv-keywords": "^3.2.0",
    "axios": "^0.18.0",
    "fusioncharts": "^3.12.2",
    "node-sass": "^4.6.1",
    "prop-types": "^15.6.0",
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "react-fusioncharts": "^1.0.5",
    "react-resize-detector": "^1.1.0",
    "react-router-dom": "^4.2.2",
    "react-select": "^1.1.0",
    "recharts": "^1.2.0"
  },
  "devDependencies": {
    "@babel/core": "^7.1.2",
    "@babel/plugin-proposal-function-bind": "^7.0.0",
    "@babel/preset-env": "^7.1.0",
    "@babel/preset-react": "^7.0.0",
    "@babel/preset-stage-0": "^7.0.0",
    "babel-loader": "^8.0.4",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "classnames": "^2.2.6",
    "clean-webpack-plugin": "^0.1.19",
    "copy-webpack-plugin": "^4.5.2",
    "css-loader": "^1.0.0",
    "file-loader": "^2.0.0",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^3.0.6",
    "react-hot-loader": "^4.3.11",
    "sass-loader": "^7.1.0",
    "style-loader": "^0.23.0",
    "uglifyjs-webpack-plugin": "^2.0.1",
    "webpack": "^4.20.2",
    "webpack-cli": "^3.1.1",
    "webpack-dev-server": "^3.1.0",
    "webpack-merge": "^4.1.4"
  }
}

.巴贝尔c

{
  "presets": [
    "@babel/preset-env",
    "@babel/preset-react",
    "@babel/plugin-proposal-function-bind"
  ],
  "plugins": [
    "babel-plugin-transform-class-properties"
  ]
}

webpack.commonn.js

const path = require('path');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry: {
        app: './src/index.js'
    },
    output: {
        path: path.join(__dirname,'/public'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: {
                    loader: 'babel-loader',
                    options: {
                        presets: ['env','react','es2015'],
                        plugins: ['transform-class-properties']
                    }
                }
            },
            {
                test: /\.css$/,
                use: ["style-loader","css-loader"]
            }
        ]
    },
    plugins: [
        new CleanWebpackPlugin(['public']),
        new HtmlWebpackPlugin({
            template: './src/index.html'
        })
    ]
};

webpack.dev.js

const webpack = require('webpack');
const merge = require('webpack-merge');
const common = require('./webpack.common');

module.exports = merge(common, {
    mode: 'development',
    devtool: 'inline-source-map',
    devServer: {
        contentBase: './public'
    }
});

webpack.prod.js

const merge = require('webpack-merge');
const common = require('./webpack.common');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');

module.exports = merge(common, {
    mode: 'production',
    optimization: {
        minimizer: [
            new UglifyJSPlugin({
                sourceMap: true,
                uglifyOptions: {
                    compress: {
                        inline: false
                    },
                    mangle: {
                        keep_fnames: true
                    }
                }
            })
        ]
    },
    devtool: 'source-map'
});

index.js

"use strict";
import React from 'react';
import ReactDOM from 'react-dom';
import './styles/app.scss';
import App from './components/App';

if (process.env.NODE_ENV !== 'production') {
    console.log('USING DEV configuration')
}

const app = (
    <App/>
);
ReactDOM.render(app, document.getElementById('app'));

当前错误为:

./src/index.js模块生成失败(来自./node_modules/babel-loader/lib/index.js):错误:从“user/mywork/dev”中找不到模块“babel-preset-env”-您是说“@babel/env”吗?

我以前使用stage-2或stage-0来启用箭头函数等,但这似乎与preset-env冲突,所以现在删除了它,并按建议扩展了.babelrc预置,但似乎仍无法使整个功能正常工作。

任何建议都非常欢迎,谢谢。

共有1个答案

孔飞舟
2023-03-14

您在两个地方指定了babel选项,首先在.babelrc中,然后在webpack.commonn.js中。js中的选项优先,但该设置是错误的:

presets: ['env','react','es2015']

用上面的方法,你告诉巴别寻找“babel-preset-env”、“babel-preset-react”等,而这些都是你没有安装的。

因此,您得到了错误:

Cannot find module 'babel-preset-env' from 'user/mywork/dev' - Did you mean "@babel/env"?

由于您安装了:

@babel/preset-env, and @babel/preset-react, etc. 

您应该指定:

presets: ['@babel/env','@babel/preset-react', .... ],

但是您应该在一个地方指定Babel选项,要么在WebPack配置中,要么在.babelrc中--而不是在两个地方指定。

我注意到的另一个错误是:babel-plugin-transform-class-properties,它与Bable@7不兼容。您应该安装@babel/plugin-proposition-class-properties。

 类似资料:
  • 从带有SP1的AEM 6.2升级到AEM 6.4后,很少有软件包未安装。旧版本处于已安装状态。 对于新软件包,显示消息为“似乎安装了另一个版本:”请参见下面的屏幕截图。 正因为如此,我可以看到很少的脚本没有更新最新的API。例如AEM 6.4升级实例:

  • 企业版用车管理后台已进行全新改版,为了不影响您的管理工作,请知晓以下改变。 一.【用车权限】已改名为【用车制度】 二.对【邀请员工】的影响 企业以前发出的加入邀请已经失效,请创建新版的邀请并发送给员工。 注:旧版邀请已经失效,所以员工使用旧版邀请提交的加入申请也随之失效,请将新版的邀请发送给员工。 三.对【添加员工】的影响 如果您添加的员工已加入其它企业,那么系统会向该员工发送一条短信,询问是否同

  • 版本升级 1.从论坛上下载对应的更新包 第一种:对于宝塔用户 升级之前请先备份好文件及数据库 下载下更新包,需要先在本地解压,然后把所需文件再次压缩,如下图: 文件覆盖完之后,如若有sql语句,则在对应的数据库执行该语句即可。 升级成功。。 第二种:对于服务器用户 升级之前请先备份好文件及数据库 下载下更新包,解压,选择文件覆盖到根目录即可。。 文件覆盖完之后,如若有sql语句,则在对应的数据库执

  • 我需要帮助。我不能升级我的反应原生项目的gradle版本。 我尝试了很多东西,下载了Android Studio的最后一个版本 我改变了这个文件\android\gradle\包装\gradle-wrapper.properties,我试图升级使用,但我仍然不能升级它。 当我反应-本机弹出它的出口"分发Url=https://services.gradle.org/distributions/gr

  • 在 Git 中合并是相当容易的。 因为 Git 使多次合并另一个分支变得很容易,这意味着你可以有一个始终保持最新的长期分支,经常解决小的冲突,比在一系列提交后解决一个巨大的冲突要好。 然而,有时也会有棘手的冲突。 不像其他的版本控制系统,Git 并不会尝试过于聪明的合并冲突解决方案。 Git 的哲学是聪明地决定无歧义的合并方案,但是如果有冲突,它不会尝试智能地自动解决它。 因此,如果很久之后才合并

  • 本文向大家介绍Xcode8、iOS10升级问题记录,包括了Xcode8、iOS10升级问题记录的使用技巧和注意事项,需要的朋友参考一下 1、webView的代理方法:   升级前: - (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error   升级后: - (void)webView:(U