预设文件不允许导出对象


87

我有一个要在其中index.js构建的轮播文件block.build.js,所以我webpack.config.js是:

var config = {
  entry: './index.js',
  output: {
    path: __dirname,
    filename: 'block.build.js',
  },
  devServer: {
    contentBase: './Carousel'
  },
  module : {
    rules : [
      {
        test: /.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
        query: {
          presets: ['react', 'es2015'],
          plugins: ['transform-class-properties']
        }
      }
    ]
  }
};
module.exports = config;

package.json我使用低于:

{
  "name": "carousel",
  "version": "1.0.0",
  "description": "",
  "main": "webpack.config.js",
  "dependencies": {
    "@babel/core": "^7.0.0-beta.40",
    "babel-cli": "^6.26.0",
    "babel-loader": "^8.0.0-beta.0",
    "babel-plugin-lodash": "^3.3.2",
    "babel-plugin-react-transform": "^3.0.0",
    "babel-preset-react": "^6.24.1",
    "cross-env": "^5.1.3",
    "lodash": "^4.17.5",
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "react-swipeable": "^4.2.0",
    "styled-components": "^3.2.1"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "watch": "webpack --watch",
    "start": "webpack-dev-server --open",
    "build": "webpack"
  },
  "devDependencies": {
    "webpack": "^4.1.1",
    "webpack-cli": "^2.0.10",
    "webpack-dev-server": "^3.1.0"
  },
  "author": "brad traversy",
  "license": "ISC"
}

…但是我收到此错误消息:

ERROR in ./index.js
Module build failed: Error: Plugin/Preset files are not allowed to export objects, only functions.

有谁知道如何解决这个问题?


Answers:


83

您使用的是Babel 6和Babel 7的组合。不能保证各个版本之间的兼容性:

"@babel/core": "^7.0.0-beta.40",
"babel-cli": "^6.26.0",
"babel-loader": "^8.0.0-beta.0",
"babel-plugin-lodash": "^3.3.2",
"babel-plugin-react-transform": "^3.0.0",
"babel-preset-react": "^6.24.1",

应该

"@babel/core": "^7.0.0-beta.40",
"@babel/cli": "^7.0.0-beta.40",
"babel-loader": "^8.0.0-beta.0",
"babel-plugin-lodash": "^3.3.2",
"babel-plugin-react-transform": "^3.0.0",
"@babel/preset-react": "^7.0.0-beta.40",

    query: {
      presets: ['react', 'es2015'],
      plugins: ['transform-class-properties']
    }

将会

    query: {
      presets: ['@babel/react', '@babel/es2015'],
      plugins: ['@babel/proposal-class-properties']
    }

我也很困惑,因为您没有@babel/proposal-class-properties在中提及package.json,但是假设它在其中也应该进行更新。


1
我要强调指出,babel-loader应该将8与其他模块v7一起使用,并且使用npm install --save-dev babel-loader@^7给了我其他错误
YakovL

然后如何提供仅属于babel 6或7的软件包?我经历了所有解决方案,然后问我@ babel / core或babel-core。可以手动更改包装吗?
胭脂红Tambascia

然后如何确保仅属于babel 6或7的软件包?我经历了所有解决方案,然后问我@ babel / core或babel-core。我认为这与节点模块仍然以某种方式引用错误的babel有关缓存问题有关。我也尝试过手动更改它们而没有运气
Carmine Tambascia

这种情况仍然发生。到目前为止,此工具github.com/babel/babel-upgrade似乎是提出更多升级依赖项的一种方式
Carmine Tambascia

我仍然遇到此错误的问题,有人可以帮助我吗?我正在尝试在快递服务器上运行我的react应用程序(使用webpack)。这是我的github存储库(github.com/smthmelv/my-react-app/tree/addExpressJS),任何帮助将不胜感激。
达尼埃兹

42

它发生在我身上,对我来说,一个简单的解决方案是卸载babel-loader@8^@babel/core

npm uninstall --save babel-loader
npm uninstall --save @babel/core

…然后安装版本7 babel-loader:

npm install --save-dev babel-loader@^7

1
确实有效,非常感谢您提供此信息。我还使用了babel / core版本7和babel-loader版本8。因此,我只是卸载了版本8,并使用命令安装了版本7npm install --save-dev babel-loader@^7
harbrinder_singh

1
尽管我没有安装任何其他js框架,但这对我来说已经解决了。
纳撒尼尔·弗里克

1
我基本上是在浪费一个下午,因为自从几周前第一次正确安装webpack 2以来,这么多软件包都发生了变化。有一种方法可以跟踪稳定的软件包?这根本没有效果。我想开发
React

1
这对我有用,尽管我遇到另一个错误,即模块构建失败(来自./node_modules/babel-loader/lib/index.js):所以我期待解决它
Francis Tito

1
令人难以置信的是,由于许多开放源代码项目已经过时,但我仍然提到了Babel 6或与
Babel

11

同样从babel-loaderv8版本开始,它们有所变化:

webpack 4.x | babel-loader 8.x | 通天塔7.x

npm install -D babel-loader @babel/core @babel/preset-env webpack

webpack 4.x | babel-loader 7.x | 通天塔6.x

npm install -D babel-loader@7 babel-core babel-preset-env webpack

(对于同样的事情@babel/preset-react,而不是babel-preset-react)。


8

我的webpack / react项目中遇到了相同的问题-似乎.babelrc文件有问题。

我更新了它,如下图所示,它成功了:

{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-react"
    ],
    "plugins": [
        "transform-class-properties",
        "transform-object-rest-spread"
    ]
}

3

这为我工作:

npm uninstall --save babel-loader
npm uninstall --save @babel/core
npm install --save-dev babel-loader@^7

在babelrc中:

"presets" : ["es2015", "react"]    

至少要记住要安装桥包,以免某些隐藏的依赖项仍在“要求”以前的版本,但这还不完整,因此,在此之后的一个多小时内,我通过npm install --save解决了此错误-dev“ babel-core@^7.0.0-bridge.0” from github.com/babel/babel/issues/8482
Carmine Tambascia,

3

此解决方案为我工作:

npm install babel-loader babel-preset-react

然后在 .babelrc

{
  "presets": [
    "@babel/preset-env", "@babel/preset-react"
  ]
}

然后运行npm run start,webpack将生成dist目录。


3

从版本6到babel 7都有升级,请参阅https://babeljs.io/docs/en/v7-migration。解决当前的问题/错误

安装

npm install --save-dev @babel/preset-react

npm install --save-dev @babel/preset-env

然后在.babelrc中,预设的依赖项应类似于

{

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

   "plugins": [
    "react-hot-loader/babel", "transform-object-rest-spread"]

}

1

我在.babelrc的预设中包含“ stage-1”,因此删除了该错误,错误消失了



0

那是由于过时的通天包。像大多数其他活动的Javascript项目一样,babel项目也已开始使用范围包。因此,程序包名称以@babel

如果使用的是纱线,请遵循以下一项:

步骤1:删除旧的程序包

$ yarn remove babel-core babel-loader babel-preset-env babel-preset-react

步骤2:添加新软件包

$ yarn add -D @babel/core babel-loader @babel/preset-env @babel/preset-react

如果您使用的是npm,请遵循以下步骤:

步骤1:删除旧的程序包

$ npm uninstall babel-core babel-loader babel-preset-env babel-preset-react

步骤2:添加新软件包

$ npm add -D @babel/core babel-loader @babel/preset-env @babel/preset-react

第三步:npm或yarn共有

安装更新的软件包后,请记住将.babelrc预设从更新react@babel/preset-react。这是一个简单的例子

{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.