Nodejs5 ve babel'de “beklenmedik token ithalatı”?


192

Js dosyasında, ithalat yerine yerine kullanılır

import co from 'co';

Ve içe aktarma 'gönderim özellikleri' ve herhangi bir çalışma zamanı bayrağı olmadan destek ( https://nodejs.org/en/docs/es6/ ) olduğu için doğrudan nodejs tarafından çalıştırılmaya çalışıldı , ancak bir hata aldım

import co from 'co';
^^^^^^

SyntaxError: Unexpected token import

Sonra babil kullanmaya çalıştım

npm install -g babel-core
npm install -g babel-cli
npm install babel-core //install to babel locally, is it necessary?

ve işletiyor

babel-node js.js

hala aynı hata var, beklenmedik token içe aktarma?

Bundan nasıl kurtulabilirim?


14
@FelixKling: Bağlantılı sorunun cevabı kesinlikle bu soruya cevap verse de, bu soruyu bunun bir kopyası olarak görmek zor. Her durumda, Google'ın beni doğrudan buraya getirdiği için burada olmama sevindim, çünkü açıklanan sözdizimi hatası gördüğümle tam olarak eşleşti. Dürüst olmak gerekirse, OP'nin, uygun bir cevapla biraz ilgili bir soru aramak yerine bunu gönderdiğine sevindim.
Scott Sauyet

3
npm i --save-dev babel-cli Benim için düzeltildi ...
ChuckJHardy

2
Bunun kopyasını kaldırmak için oy kullanıyorum, bunun ayrı bir soru olduğunu hissediyorum.
TWR Cole

3
Bu bir kopya değil. Ben yazı istiyorum bir diğer çözüm bu eklentiyi sahip kez daha kontrol etmektir .babelrc: "transform-es2015-modules-commonjs".
Dan Dascalescu

7
Kopyalar iyi olmalı (olmalıdır). İnsanların nasıl çalıştığının önemli bir parçası. @ScottSauyet'in söyledikleri bunun nedenlerinden biridir. Farklı bakış açılarına sahip farklı açıklamalar başka bir şeydir. Bütün bu `` yinelenen av '', yıllardır düzenleyici bir ziyaretçi olarak bana çok yararsız geliyor. Keşke dursaydı.
Stijn de Witt

Yanıtlar:


203

Babel 6 Sürüm notlarından:

Babel, bir ES2015 aktarıcısı değil, JavaScript araçları için bir platform olmaya odaklandığından, tüm eklentileri etkinleştirmeye karar verdik. Bu, Babel'i yüklediğinizde artık ES2015 kodunuzu varsayılan olarak aktarmayacağı anlamına gelir.

Kurulumumda es2015 hazır ayarını yükledim

npm install --save-dev babel-preset-es2015

veya iplikle

yarn add babel-preset-es2015 --dev

ve .babelrc dosyamdaki ön ayarı etkinleştirdim

{
  "presets": ["es2015"]
}

14
İyi cevap. Ne yazık ki, hala request () kullanmanız gerekiyor ve npm paketleri için import kullanamıyorsunuz.
Jagtesh Chadha

24
Ve hazır ayarları babel-nodeile birlikte kullanıyorum . Aynı hata. es2015react
FuzzY

3
İşe yaramadı. Evet bu gerekli, ancak ithalat işi yapmıyor.
still_dreaming_1

6
Benim için basit bir düzeltmeydi. Bir tepki / babel projesinden kodu başka bir es5 projesine uyarlamaya ve aynı zamanda es6 sözdizimine yükseltmeye çalışırken tünel vizyonunda yakalandım. Benim script.json komut dosyaları altında, "düğüm çalıştırmak" yerine "babel-düğüm run.js" ile değiştirmeyi unuttum. Evet, kendimi koyun gibi hissediyorum. :)
joezen777

2
JS ekosistemi çok kolay
Rodrigo

51

Modüller uygulanana kadar kodunuzu çalıştırmak için Babel "aktarıcısını" kullanabilirsiniz:

npm install --save babel-cli babel-preset-node6

ve sonra

./node_modules/babel-cli/bin/babel-node.js --presets node6 ./your_script.js

Yazmak istediğiniz daha dont Eğer --presets node6bunu tarafından dosya .babelrc kaydedebilirsiniz:

{
  "presets": [
    "node6"
  ]
}

Bkz. Https://www.npmjs.com/package/babel-preset-node6 ve https://babeljs.io/docs/usage/cli/


16
babil milletten son tavsiye, hangi polyfill'lerin çalışacağını tespit eden babel-preset- env'yi kullanmaktır babel-preset-node*. In .babelrckullanımı:{ "presets": [ ["env", { "targets": { "node": "current" } }] ] }
ronen

Bundan sonra hatayı almaya başladım (tanınmayan simge '<'): server.js:Unexpected token (37:12) 35 | const initialState = store.getState(); 36 | const componentHTML = renderToString( > 37 | <Provider store={store}> | ^ 38 | <RouterContext {...props} /> 39 | </Provider>, 40 | );
AK

26
  1. Paketleri yükleyin: babel-core, babel-polyfill,babel-preset-es2015
  2. .babelrcİçeriklerle oluştur :{ "presets": ["es2015"] }
  3. importAna giriş dosyanıza ifade koymayın , başka bir dosya kullanın, örneğin: app.jsve ana giriş dosyanızın gerekli olması babel-core/registerve babel-polyfillbabel'in başka bir şeyden önce ilk etapta ayrı ayrı çalışmasını sağlamak gerekir . Sonra app.jswhere importdeyimini isteyebilirsiniz .

Misal:

index.js

require('babel-core/register');
require('babel-polyfill');
require('./app');

app.js

import co from 'co';

İle çalışmalıdır node index.js.


1
Bu, geliştirme için kullanılabilecek kolay bir çözümdür. Üretim için her zaman es5 kodunuzu derlemelisiniz.
Jonas Drotleff

Bekle ... Bence bu mu? birkaç ay önce javascript / perl / herhangi bir dilin, aynı dilde mevcut dilin özel olarak ayrıştırılmasıyla güncelleştirilmeden genişletilebileceği bu rüyayı gördüm. Burada olan bu mu ???
Dmitry

Mükemmel cevap. Ancak senaryolarda, aşağıdaki gibi bir şey koyabilirsiniz. Böylece herhangi bir dosyada kullanabilirsiniz. "scriptler": {"build": "babel src -d dist", "start": "node dist / index.js"}
gkarthiks

15

babel-preset-es2015 artık kullanımdan kaldırılmıştır ve Laurence'ın çözümünü kullanmaya çalışırsanız bir uyarı alırsınız.

Bunun Babel 6.24.1+ ile çalışmasını sağlamak için şunu babel-preset-envkullanın:

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

Ardından env, ön ayarlarınıza aşağıdakileri ekleyin .babelrc:

{
  "presets": ["env"]
}

Görmek fazla bilgi için Babel belgelerine .


CLI ile bunu yapmanın bir yolu var mı?
jcollum


5

Derlenmemiş dosyalar çalıştırıyor olabilirsiniz. Temiz başlayalım!

Çalışma dizininizde şunları oluşturun:

  • İki klasör. Önceden derlenmiş es2015 kodu için bir tane. Diğeri babil çıktısı için. Bunlara sırasıyla "src" ve "lib" adını vereceğiz.
  • Aşağıdaki nesneye sahip bir package.json dosyası:

    { 
      "scripts": {
          "transpile-es2015": "babel src -d lib"
      },
      "devDependencies": {
          "babel-cli": "^6.18.0",
          "babel-preset-latest": "^6.16.0"
      }
    }
  • Aşağıdaki talimatları içeren ".babelrc" adlı bir dosya: {"presets": ["latest"]}

  • Son olarak, src / index.js dosyanıza test kodu yazın. Senin durumunda: import co from 'co'.

Konsolunuz aracılığıyla:

  • Paketlerinizi yükleyin: npm install
  • Kaynak dizininizi, paketimizde zaten belirtildiği gibi -d (aka --out-dir) bayrağıyla çıkış dizininize aktarın: npm run transpile-es2015
  • Kodunuzu çıktı dizininden çalıştırın! node lib/index.js

Talihsiz çalışmadı. Unexpected token import.
dipole_moment

1
babelKomutun arama yolunuzda olduğundan emin olun . İşte küçük bir varyasyon. package.json: {"scriptler": {"transpile": "./node_modules/.bin/babel src -d lib"}, "devDependencies": {"babel-cli": "^ 6.24.1", "babel-preset- env ":" ^ 1.6.0 "}} .babelrc: {" hazır ayarlar ": [" env "]}
Maksim Yegorov

5

Mevcut yöntem aşağıdakileri kullanmaktır:

npm install --save-dev babel-cli babel-preset-env

Ve sonra içeri .babelrc

{
    "presets": ["env"]
}

Bu yükleme js son sürümü (es2015 ve ötesi) için Babel desteği

Js dosyanızı aşağıdaki gibi çalıştırırken, kullanım babel-nodeiçindeki komut dosyalarınıza eklemeyi unutmayın package.json.

"scripts": {
   "test": "mocha",
    //Add this line to your scripts
   "populate": "node_modules/babel-cli/bin/babel-node.js" 
},

Şimdi npm populate yourfile.jsterminalin içine girebilirsiniz .

Windows çalıştırıyorsanız ve tanınmayan dahili veya harici komut çalıştırıyorsanız, komut dosyasının önündeki düğümü aşağıdaki gibi kullanın

node node_modules/babel-cli/bin/babel-node.js

Sonra npm run populate


3

Yeniden yükleme için babel-preset-env ve nodemon kullanmanız gerekir .

Ardından, aşağıdaki içeriğe sahip .babelrc dosyası oluşturun:

{
  "presets": ["env"]
}

Son olarak package.json içinde komut dosyası oluşturun:

"scripts": {
    "babel-node": "babel-node --presets=env",
    "start": "nodemon --exec npm run babel-node -- ./index.js",
    "build": "babel src -d dist"
  }

Veya bu ısıtıcı plakayı kullanın:

Boyler plakası: node-es6


2
  • install -> "npm i - kaydetme dev babel-cli babel-önayar-es2015 babel-önayar-sahne-0"

sonraki package.json dosyasındaki komut dosyalarını ekle "start": "babel-node server.js"

    {
  "name": "node",
  "version": "1.0.0",
  "description": "",
  "main": "server.js",
  "dependencies": {
    "body-parser": "^1.18.2",
    "express": "^4.16.2",
    "lodash": "^4.17.4",
    "mongoose": "^5.0.1"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-stage-0": "^6.24.1"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "babel-node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

ve babil için ".babelrc" kökünde dosya oluşturun

    {
    "presets":[
        "es2015",
        "stage-0"
    ]
}

ve terminalde npm start'ı çalıştırın


1

Sorunu çözmek için aşağıdaki adımları uygulayın:

1) CLI ve env ön ayarını yükleyin

$ npm install --save-dev babel-cli babel-preset-env

2) Bir .babelrc dosyası oluşturun

{
  "presets": ["env"]
}

3) package.json içinde npm başlangıcını yapılandırın

"scripts": {
    "start": "babel-node ./server/app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  }

4) sonra uygulamayı başlatın

$ npm start

0

Sorunun üstesinden gelmek için aşağıdakileri yaptım (ex.js komut dosyası)

sorun

$ cat ex.js
import { Stack } from 'es-collections';
console.log("Successfully Imported");

$ node ex.js
/Users/nsaboo/ex.js:1
(function (exports, require, module, __filename, __dirname) { import { Stack } from 'es-collections';
                                                              ^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:152:10)
    at Module._compile (module.js:624:28)
    at Object.Module._extensions..js (module.js:671:10)
    at Module.load (module.js:573:32)
    at tryModuleLoad (module.js:513:12)
    at Function.Module._load (module.js:505:3)
    at Function.Module.runMain (module.js:701:10)
    at startup (bootstrap_node.js:194:16)
    at bootstrap_node.js:618:3

çözüm

# npm package installation
npm install --save-dev babel-preset-env babel-cli es-collections

# .babelrc setup
$ cat .babelrc
{
  "presets": [
    ["env", {
      "targets": {
        "node": "current"
      }
    }]
  ]
}

# execution with node
$ npx babel ex.js --out-file ex-new.js
$ node ex-new.js
Successfully Imported

# or execution with babel-node
$ babel-node ex.js
Successfully Imported

0

@jovi tüm yapmanız gereken bu gibi .babelrc dosyası eklemek:

{
  "plugins": [
    "transform-strict-mode",
    "transform-es2015-modules-commonjs",
    "transform-es2015-spread",
    "transform-es2015-destructuring",
    "transform-es2015-parameters"
  ]
}

ve bu eklentileri npm ile bağımlılık olarak yükleyin.

sonra babel-node *** deneyin. tekrar js. Umarım bu size yardımcı olabilir.


-4

Uygulamanızda, require()'içe aktarma' anahtar kelimesini değil , modüllerinizi beyan etmelisiniz :

const app = require("example_dependency");

Ardından, bir .babelrc dosyası oluşturun:

{
"presets": [ 
    ["es2015", { "modules": false }]
]
}

Sonra, gulp dosyasında, require()modüllerinizi beyan ettiğinizden emin olun :

var gulp = require("gulp");
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.