Eu tenho um arquivo .ts no nó js (versão mais recente do node.js para 07.10.19) com a importação de node-module sem exportação padrão. Eu uso essa construção: import { Class } from 'abc';
Quando eu executar o código, eu tenho esse erro: Cannot use import statement outside a module
.
Na rede, vejo muitas soluções para esse problema (para .js), mas isso não ajuda em mim, talvez porque eu tenha um arquivo datilografado. Aqui está o meu código:
import { Class } from 'abc';
module.exports = { ...
execute(a : Class ,args : Array<string>){ ...
Aqui está o meu tsconfig.json:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true
}
}
typescript
ecmascript-6
Zerumi
fonte
fonte
import
declaração é a primeira linha do seu arquivo?require
vsimport
) você usa. Apenas para lhe dar uma idéia de como isso é complicado, o Node tem alguma documentação sobreimport
vsrequire
e como fazê-los trabalhar juntos.module.exports
sintaxe, provavelmente não está em um módulo ES6.execute(a : abc.Class...
Respostas:
Adicionar
“type”: “module”
ao package.json informará ao Node que você está usando os módulos do ES2015, o que deve eliminar o erro, mas você precisará informar o Typescript para gerar esse tipo de módulo configurando em“module”: “es2015”
vez de“commonjs”
em tsconfig.json.No entanto, isso causa um problema com o código atual porque, embora você esteja usando uma
import {}
instrução ES6 , você está exportando usando amodule.exports = {}
sintaxe commonJS , e o carregador de módulo ES do Node terá um problema. Existem duas maneiras de lidar com isso:module.exports
but, mas diga ao Node para interpretar esse arquivo como commonJS, fornecendo uma extensão .cjs .export function execute(…)..
A primeira opção pode ficar um pouco complicada porque o compilador produzirá arquivos .js e você precisará alterá-lo para .cjs o tempo todo (tanto quanto eu sei). Com a segunda opção, você poderá executar o arquivo com Nó (incluindo o sinalizador --experimental-modules para versões <13.8).
Se você absolutamente precisar usar o commonJS, talvez seja melhor instalar as definições de tipo para Node: @ types / node e alterar a importação para o formato commonJS:
require('abc')
e mantenha o restante das configurações como estão (embora você possa adicionar "type" : “Commonjs” para package.json para ser explícito).fonte