Tệp Babel được sao chép mà không bị chuyển đổi


106

Tôi có mã này:

"use strict";

import browserSync from "browser-sync";
import httpProxy from "http-proxy";

let proxy = httpProxy.createProxyServer({});

và tôi đã cài đặt babel-corebabel-clitoàn cầu thông qua npm. Vấn đề là khi tôi cố gắng biên dịch với điều này trên thiết bị đầu cuối của mình:

babel proxy.js --out-file proxified.js

Tệp đầu ra được sao chép thay vì được biên dịch (ý tôi là, nó giống với tệp nguồn).

Tôi còn thiếu gì ở đây?


hiện các letthay đổi varnhưng importbáo cáo vẫn còn?
hết

Đối với các phiên bản mới hơn của react, hãy sử dụng các mô-đun babel mới: stackoverflow.com/a/53927457/6665568 . Nó có thông báo lỗi tốt hơn và hỗ trợ các tính năng mới của phản ứng.
Natesh bhat 26/12/18

Câu trả lời:


165

Babel là một khung chuyển đổi. Trước 6.x, nó cho phép một số biến đổi nhất định theo mặc định, nhưng với việc sử dụng ngày càng nhiều các phiên bản Node vốn hỗ trợ nhiều tính năng của ES6, điều quan trọng hơn là mọi thứ có thể cấu hình được. Theo mặc định, Babel 6.x không thực hiện bất kỳ phép biến đổi nào. Bạn cần cho nó biết những biến đổi nào để chạy:

npm install babel-preset-env

và chạy

babel --presets env proxy.js --out-file proxified.js

hoặc tạo một .babelrctệp chứa

{
    "presets": [
        "env"
    ]
}

và chạy nó giống như bạn trước đây.

envtrong trường hợp này là một giá trị đặt trước về cơ bản có nghĩa là biên dịch tất cả các hành vi ES * tiêu chuẩn sang ES5. Nếu bạn đang sử dụng các phiên bản Node hỗ trợ một số ES6, bạn có thể muốn xem xét việc

{
    "presets": [
        ["env", { "targets": { "node": "true" } }],
    ]
}

để yêu cầu cài đặt trước chỉ xử lý những thứ không được phiên bản Node của bạn hỗ trợ. Bạn cũng có thể đưa các phiên bản trình duyệt vào mục tiêu của mình nếu bạn cần hỗ trợ trình duyệt.


15
điều này là hữu ích. tại sao họ không đưa điều này vào tài liệu? cài đặt babel-preset trên toàn cầu có an toàn không?
kidcapital vào

@kidcapital Các tài liệu có bao gồm điều này, nhưng có vẻ như chỉ là một lưu ý phụ. Tôi đã dành rất nhiều thời gian để tìm cách lấy lại cấu hình babel 6.0 đúng cách khi nó được phát hành lần đầu.
nick

Ý chính của bài đăng này đã được thêm vào dưới dạng một hộp thông tin tại trang Thiết lập cho mỗi PR # 72 . Một cải tiến rất nhỏ, nhưng bạn phải bắt đầu từ đâu đó! Cảm ơn Logan.
nick

7
Quá nhiều thứ cho quy ước về cấu hình ... nên Babel không làm gì cả - chỉ sao chép tệp?
alex.p

Vui lòng đặt một câu hỏi mới với tất cả thông tin về thiết lập của bạn để ai đó có thể trả lời.
loganfsmyth

5

Hầu hết những câu trả lời này đã lỗi thời. @babel/preset-env"@babel/preset-reactlà những gì bạn cần (kể từ tháng 7 năm 2019).


3

Tôi đã gặp vấn đề tương tự với một nguyên nhân khác:

Mã mà tôi đang cố tải không nằm trong thư mục gói và Babel không mặc định chuyển mã ra bên ngoài thư mục gói.

Tôi đã giải quyết nó bằng cách di chuyển mã đã nhập, nhưng có lẽ tôi cũng có thể sử dụng một số câu lệnh bao gồm trong cấu hình Babel.


Bạn có thể nói rõ hơn về điều đó? mã giao diện người dùng của tôi cũng không phải là "trong thư mục gói" và nó hoạt động tốt. Mã máy chủ của tôi chứa "nhập" nhưng babel-cli không giải quyết được những ...
Philippe

Hmm, không biết phải nói chi tiết về điều gì? Babel đã không chuyển ngữ. Hãy thử nhìn vào tất cả các nguồn của bạn Babel cấu hình ...
w00t

vấn đề tôi đang cố gắng giải quyết là các tệp máy chủ của tôi được tổ chức trong một số thư mục: Tôi có server.js, sau đó là / api / ... thứ ... Khi tôi chạy từ bộ nhớ, mỗi "nhập" hoặc "yêu cầu" trong các tệp đó đang được giải quyết động. Khi tôi chạy babel từ dòng lệnh, tôi chỉ xuất ra một tệp duy nhất, nhưng không giải quyết việc nhập tương đối, vì vậy tôi không thể sử dụng tệp đó để chạy máy chủ của mình ...
Philippe

3

Trước tiên, hãy đảm bảo bạn có những điều sau node modules:

npm i -D webpack babel-core babel-preset-es2015 babel-preset-stage-2 babel-loader

Tiếp theo, thêm cái này vào tệp cấu hình Webpack của bạn ( webpack.config.js):

// webpack.config.js
...
module  :  {
  loaders  :  [
    {
      test    :  /\.js$/,
      loader  :  'babel',
      exclude :  /node_modules/,
      options :  {
        presets  :  [ 'es2015', 'stage-2' ] // stage-2 if required
      } 
    } 
  ]
}
...

Người giới thiệu:

Chúc may mắn!


2

Kể từ 2020, Jan:

BƯỚC 1: Cài đặt Babel presets:

yarn add -D @babel/preset-env @babel/preset-react

BƯỚC 2: Tạo tệp: babelrc.jsvà thêm presets:

module.exports = {
  // ...
  presets: ["@babel/preset-env", "@babel/preset-react"],
  // ...
}

BƯỚC 3: - Cài đặt babel-loader:

yarn add -D babel-loader

BƯỚC 4: - Thêm cấu hình bộ tải trong webpack.config.js:

{
//...
  module: [
    rules: [
      test: /\.(js|mjs|jsx|ts|tsx)$/,
      loader: require.resolve('babel-loader')
    ]
  ]
//...
}

Chúc may mắn...



1

Cùng một lỗi, nguyên nhân khác nhau:

Việc vận chuyển đã hoạt động trước đó và sau đó đột nhiên ngừng hoạt động, với các tệp chỉ được sao chép nguyên trạng.

Hóa ra tôi đã mở nó .babelrcvào một thời điểm nào đó và Windows đã quyết định thêm .txtvào tên tệp. Giờ điều đó .babelrc.txtđã không được babel nhận ra. Loại bỏ .txthậu tố đã khắc phục điều đó.


0

sửa lỗi .babelrc của bạn

{
  "presets": [
    "react",
    "ES2015"
  ]
}

0

Trong năm 2018:

Cài đặt các gói sau nếu bạn chưa có:

npm install babel-loader babel-preset-react

webpack.config.js

{
    test: /\.jsx?$/,
    exclude: /node_modules/,
    use: [
      {
        loader: 'babel-loader',
        options: {
          presets: ['es2015','react']  // <--- !`react` must be part of presets!
        }
      }
    ],
  }

0

Giải pháp tối hậu

Tôi đã lãng phí 3 ngày cho việc này

import react from 'react' unexpected identifier

Tôi đã thử sửa đổi webpack.config.jspackage.jsoncác tệp, và thêm .babelrc, cài đặt và cập nhật các gói thông qua npm, tôi đã truy cập rất nhiều trang nhưng không có gì hoạt động.


Điều gì đã hoạt động? Hai từ: npm bắt đầu. Đúng rồi.

chạy

npm start 

lệnh trong thiết bị đầu cuối để khởi chạy máy chủ cục bộ

...

(lưu ý rằng nó có thể không hoạt động ngay lập tức nhưng có lẽ chỉ sau khi bạn thực hiện một số thao tác trên npm vì trước khi thử điều này, tôi đã xóa tất cả các thay đổi trong các tệp đó và nó hoạt động, vì vậy sau khi bạn thực sự hoàn thành, hãy coi nó như lần cuối cùng của bạn khu nghỉ mát )


Tôi tìm thấy thông tin đó trên trang gọn gàng này . Nó bằng tiếng Ba Lan nhưng hãy sử dụng Google dịch trên đó.

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.