Các tệp đặt trước không được phép xuất đối tượng


87

Tôi có một tệp băng chuyền mà tôi muốn lấy index.jsvà tạo block.build.js, vì vậy tệp của tôi webpack.config.jslà:

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;

Cái package.jsonmà tôi sử dụng là bên dưới:

{
  "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"
}

… Nhưng tôi nhận được thông báo lỗi này:

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

Có ai biết làm thế nào để giải quyết điều này?


Câu trả lời:


83

Bạn đang sử dụng kết hợp Babel 6 và Babel 7. Không có gì đảm bảo về tính tương thích giữa các phiên bản:

"@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",

nên là

"@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']
    }

sẽ là

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

Tôi cũng bối rối vì bạn không đề cập @babel/proposal-class-propertiestrong của bạn package.json, nhưng giả sử nó có trong đó thì nó cũng nên được cập nhật.


1
Tôi muốn nhấn mạnh rằng babel-loader8 nên được sử dụng với những mô-đun khác V7 và sử dụng npm install --save-dev babel-loader@^7đã cho tôi lỗi khác
YakovL

sau đó làm thế nào để cung cấp các gói chỉ thuộc về babel 6 hoặc 7? Tôi đã xem qua tất cả các giải pháp và sau đó nó hỏi tôi @ babel / core hoặc babel-core. Có thể thay đổi gói theo cách thủ công không?
Carmine Tambascia

làm thế nào để đảm bảo một gói chỉ thuộc về babel 6 hoặc 7? Tôi đã xem qua tất cả các giải pháp và sau đó nó hỏi tôi @ babel / core hoặc babel-core. Tôi tin rằng nó phải làm với các mô-đun nút vẫn tham chiếu bằng cách nào đó đến sai babel cho sự cố bộ nhớ cache. Tôi cũng đã cố gắng để thay đổi bằng tay chúng mà không cần may mắn
Carmine Tambascia

Tình trạng này vẫn diễn ra. Cho đến nay công cụ này github.com/babel/babel-upgrade dường như một cách khi nhiều phụ thuộc để nâng cấp đều có phần giới
Carmine Tambascia

Tôi vẫn gặp sự cố với lỗi này, ai đó có thể giúp tôi không? Tôi đang cố gắng chạy ứng dụng phản ứng của mình (sử dụng webpack) trên máy chủ express. Đây là github repo của tôi ( github.com/smthmelv/my-react-app/tree/addExpressJS ), mọi sự trợ giúp sẽ được đánh giá rất cao.
Darneezie

42

Điều đó đã xảy ra với tôi và một giải pháp đơn giản cho tôi là gỡ cài đặt babel-loader@8^@babel/core:

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

… Và sau đó để cài đặt babel-loader phiên bản 7:

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

1
Nó thực sự hoạt động, cảm ơn rất nhiều vì thông tin này. Tôi cũng đã sử dụng phiên bản babel / lõi 7 và phiên bản babel-loader 8. Vì vậy, tôi chỉ gỡ bỏ cài đặt phiên bản 8 và cài đặt phiên bản 7 với lệnhnpm install --save-dev babel-loader@^7
harbrinder_singh

1
Điều này đã sửa chữa nó cho tôi, mặc dù tôi chưa cài đặt bất kỳ khung js nào khác.
Nathaniel Flick

1
Về cơ bản tôi đã lãng phí một buổi chiều vì có quá nhiều gói thay đổi kể từ chỉ vài tuần trước khi tôi lần đầu tiên thiết lập đúng webpack 2. Có một cách để theo dõi các gói ổn định? Điều này không hiệu quả chút nào. Tôi muốn phát triển phản ứng thành phần không giữ cài đặt và gói babel unistall
Carmine Tambascia

1
Công trình này cho tôi mặc dù tôi đã nhận một lỗi đó là xây dựng mô-đun thất bại (từ ./node_modules/babel-loader/lib/index.js): rất mong muốn được giải quyết nó
Francis Tito

1
Incredible như Tôi liên tục gặp vấn đề này vì nhiều dự án mã nguồn mở khá lỗi thời nhưng tham khảo babel 6 hoặc kết hợp với babel 7
Carmine Tambascia

11

Cũng từ phiên bản babel-loaderv8, chúng đã thay đổi một chút:

webpack 4.x | babel-loader 8.x | babel 7.x

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

webpack 4.x | babel-loader 7.x | babel 6.x

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

(điều tương tự @babel/preset-reactthay vì babel-preset-react).


8

Gặp sự cố tương tự trong dự án webpack / react của tôi - có vẻ như đã xảy ra sự cố với .babelrctệp.

Tôi đã cập nhật nó như được thấy bên dưới và nó đã thực hiện thủ thuật:

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

3

điều này đã làm việc cho tôi:

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

và trong babelrc:

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

Điều này không hoàn thành để giải quyết vấn đề này ít nhất hãy nhớ cài đặt gói cầu nối để tránh rằng một số phụ thuộc hiddend vẫn "yêu cầu" phiên bản trước, tôi đã giải quyết lỗi này sau hơn 1 giờ nhờ cài đặt npm này --save -dev "babel-core@^7.0.0-bridge.0" từ đây github.com/babel/babel/issues/8482
Carmine Tambascia

3

Giải pháp này đã làm việc cho tôi:

npm install babel-loader babel-preset-react

sau đó trong .babelrc

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

sau đó chạy npm run start, webpack sẽ tạo distthư mục.


3

Có các nâng cấp trong babel 7 từ phiên bản 6, hãy tham khảo https://babeljs.io/docs/en/v7-migration . Để giải quyết vấn đề / lỗi hiện tại

Tải về

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

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

thì trong .babelrc phụ thuộc cho các giá trị đặt trước sẽ giống như

{

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

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

}

1

Tôi có "giai đoạn 1" trong các giá trị đặt trước của mình bằng .babelrc, vì vậy tôi đã xóa phần đó và lỗi đã biến mất


0

Thay thế tệp .babelrc của bạn sau mã, điều này khắc phục sự cố của tôi

{
  "presets": ["module:metro-react-native-babel-preset"]
}

0

Đó là do các gói babel lỗi thời đang được sử dụng. Dự án babel, cũng giống như hầu hết các dự án Javascript đang hoạt động khác, đã chuyển sang sử dụng các gói phạm vi. Do đó, tên gói bắt đầu bằng@babel

Nếu bạn đang sử dụng sợi, hãy làm theo cách dưới đây:

Bước 1: Loại bỏ các gói cũ

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

bước 2: Thêm các gói mới

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

Nếu bạn đang sử dụng npm, hãy làm theo cách bên dưới:

bước 1: Loại bỏ các gói cũ

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

bước 2: Thêm các gói mới

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

Bước 3: chung cho cả npm hoặc sợi

Sau khi cài đặt các gói mới hơn, hãy nhớ cập nhật các .babelrccài đặt trước của bạn từ reactthành @babel/preset-react. Đây là một ví dụ đơn giản

{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.