Saya punya proyek ApolloServer yang memberi saya masalah, jadi saya pikir saya mungkin memperbaruinya dan mengalami masalah ketika menggunakan Babel terbaru. "Index.js" saya adalah:
require('dotenv').config()
import {startServer} from './server'
startServer()
Dan ketika saya menjalankannya saya mendapatkan kesalahan "SyntaxError: Tidak dapat menggunakan pernyataan impor di luar modul". Pertama saya mencoba melakukan hal-hal untuk meyakinkan TPTB * bahwa ini adalah modul (tidak berhasil). Jadi saya mengubah "impor" menjadi "memerlukan" dan ini berhasil.
Tapi sekarang saya memiliki sekitar dua lusin "impor" di file lain yang memberi saya kesalahan yang sama.
* Saya yakin akar masalah saya adalah bahwa saya bahkan tidak yakin apa yang mengeluh tentang masalah ini. Saya berasumsi itu adalah Babel 7 (karena saya berasal dari Babel 6 dan saya harus mengubah preset) tetapi saya tidak 100% yakin.
Sebagian besar dari apa yang saya temukan untuk solusi tampaknya tidak berlaku untuk Node lurus. Seperti ini di sini:
Modul ES6 Impor yang memberikan "Sintaks Tanpa PerintahError: Pengidentifikasi tak terduga"
Mengatakan itu diselesaikan dengan menambahkan "type = module" tetapi ini biasanya akan masuk dalam HTML, yang saya tidak punya. Saya juga mencoba menggunakan preset lama proyek saya:
"presets": ["es2015", "stage-2"],
"plugins": []
Tapi itu membuat saya kesalahan lain: "Kesalahan: File Plugin / Preset tidak diizinkan untuk mengekspor objek, hanya fungsi."
UPDATE: Ini adalah dependensi yang saya mulai dengan:
"dependencies": {
"@babel/polyfill": "^7.6.0",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-server": "^2.9.6",
"babel-preset-es2015": "^6.24.1",
sumber
jest.config.js
ke'ts-jest/presets/js-with-ts'
- masih memiliki beberapa masalah lain tetapi ini menyelesaikan yang besar. ..... eh ya, masalah saya adalah pengujian terkait ... build normal baik-baik sajaJawaban:
Pembaruan 2020 (Node 13.2.0+)
Pastikan Anda telah menginstal Node versi terbaru. The
--experimental-modules
flag tidak lagi diperlukan. Cukup lakukan salah satu dari yang berikut :"type": "module"
ke induk terdekatpackage.json
. Dengan ini, semua.js
dan.mjs
file ditafsirkan sebagai modul ES. Anda dapat mengartikan file individual sebagai CommonJS dengan menggunakan.cjs
ekstensi.ATAU
.mjs
ekstensi secara eksplisit . Semua file lain, seperti.js
akan ditafsirkan sebagai CommonJS, yang merupakan default jikatype
tidak didefinisikan dalampackage.json
.sumber
Menurut dokumen resmi ( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
Untuk membuat Node memperlakukan file Anda sebagai modul ES, Anda harus ( https://nodejs.org/api/esm.html#esm_enabling ):
sumber
Saya memiliki masalah yang sama dan berikut ini telah memperbaikinya (menggunakan simpul 12.13.1):
info lebih lanjut: https://nodejs.org/api/esm.html
sumber
Saya mengalami masalah ini dalam proyek Express API yang masih baru.
Kode server yang menyinggung di
src/server/server.js
:Inilah ketergantungan saya:
Dan inilah pelari yang melempar kesalahan:
Ini menyebalkan, karena saya memiliki proyek Express serupa yang bekerja dengan baik.
Solusinya adalah pertama-tama menambahkan ketergantungan ini:
Dan kemudian
babel.config.js
menghubungkannya menggunakan root proyek:Saya tidak sepenuhnya mengerti mengapa ini berhasil, tetapi saya menyalinnya dari sumber yang berwenang , jadi saya senang menggunakannya.
sumber
:-)
sumber
Solusi saya adalah memasukkan babel-node path sambil menjalankan nodemon sebagai berikut:
Anda dapat menambahkan skrip package.json Anda sebagai:
CATATAN: File entri saya adalah index.js ganti dengan file entri Anda (banyak yang memiliki app.js / server.js).
sumber