Saya memiliki file .ts di node js (versi terbaru dari node.js untuk 07.10.19) aplikasi dengan mengimpor node-module tanpa ekspor default. Saya menggunakan konstruksi ini: import { Class } from 'abc';
Ketika saya menjalankan kode, saya memiliki kesalahan ini: Cannot use import statement outside a module
.
Dalam jaringan saya melihat banyak solusi untuk masalah ini (untuk .js), tetapi tidak membantu saya, mungkin karena saya punya file naskah. Ini kode saya:
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
Inilah tsconfig.json saya:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
typescript
ecmascript-6
Zerumi
sumber
sumber
import
pernyataan itu baris pertama dalam file Anda?require
vsimport
) yang Anda gunakan. Hanya untuk memberi tahu Anda betapa rumitnya ini, Node memiliki beberapa dokumentasi tentangimport
vsrequire
dan bagaimana membuatnya bekerja bersama.module.exports
sintaks, Anda mungkin tidak berada dalam modul ES6.execute(a : abc.Class...
Jawaban:
Menambahkan
“type”: “module”
ke package.json akan memberi tahu Node bahwa Anda menggunakan modul ES2015, yang seharusnya menghilangkan kesalahan tersebut, tetapi kemudian Anda harus memberi tahu Typescript untuk menghasilkan modul jenis ini dengan mengatur“module”: “es2015”
alih-alih“commonjs”
di tsconfig.json.Namun ini menyebabkan masalah dengan kode saat ini karena meskipun Anda menggunakan
import {}
pernyataan ES6 Anda mengekspor menggunakanmodule.exports = {}
sintaks commonJS , dan pemuat modul ES Node akan memiliki masalah dengan itu. Ada dua cara untuk menghadapinya:module.exports
tetapi beri tahu Node untuk menafsirkan file ini sebagai commonJS dengan memberikannya ekstensi .cjs .export function execute(…)..
Opsi pertama bisa agak rumit karena kompiler akan menampilkan file .js dan Anda harus mengubahnya ke .cjs setiap saat (sejauh yang saya tahu). Dengan opsi kedua Anda harus dapat menjalankan file dengan Node (termasuk flag --experimental-modules untuk versi <13.8).
Jika Anda benar-benar perlu menggunakan commonJS, mungkin lebih baik untuk menginstal definisi tipe untuk Node: @ types / node dan ubah impor ke format commonJS:
require('abc')
dan pertahankan pengaturan seperti apa adanya (meskipun Anda dapat menambahkan "ketik" : "Commonjs" ke package.json menjadi eksplisit).sumber