Eu não entendo o que está errado. Nó v5.6.0 NPM v3.10.6
O código:
function (exports, require, module, __filename, __dirname) {
import express from 'express'
};
O erro:
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:140:18)
at node.js:1001:3
javascript
node.js
npm
ecmascript-6
SofDroid
fonte
fonte
Respostas:
Atualização 3: Desde o Nó 13 , você pode usar a extensão .mjs ou definir "type": "module" em seu package.json. Você não precisa usar a
--experimental-modules
bandeira.Atualização 2: Desde o Nó 12 , você pode usar a
.mjs
extensão ou definir"type": "module"
no seu package.json. E você precisa executar o nó com a--experimental-modules
bandeira.Atualização: no nó 9 , é ativado atrás de um sinalizador e usa a
.mjs
extensão.Embora faça
import
parte do ES6, infelizmente ainda não é suportado no NodeJS por padrão e só recentemente conseguiu suporte nos navegadores.Consulte a tabela de compatibilidade do navegador no MDN e esse problema do nó .
Da atualização de James M Snell sobre os módulos ES6 no Node.js (fevereiro de 2017):
Até o suporte aparecer nativamente, você precisará continuar usando as
require
instruções clássicas :Se você realmente deseja usar os novos recursos do ES6 / 7 no NodeJS, é possível compilá-lo usando o Babel. Aqui está um servidor de exemplo .
fonte
Infelizmente, o Node.js ainda não suporta o ES6
import
.Para realizar o que você está tentando fazer (importar o módulo Express), esse código deve ser suficiente
Além disso, verifique se o Express está instalado executando
Consulte a documentação do Node.js. para obter mais informações sobre como aprender o Node.js.
fonte
import
não é necessariamente um recurso do TypeScript. TypeScript é ES6 com digitações. Coisas como importação são nativas do ES6.node index.js
funciona para mim, mas quando corronode dist/main.js
, também receboUnexpected token import
.index.js
está passando não significa que vocêdist/main.js
também passará.Conforme mencionado em outras respostas, o Nó JS atualmente não suporta importações do ES6.
(A partir de agora, leia EDIT 2)
Habilitar importações do ES6 no nó js fornece uma solução para esse problema. Eu tentei isso e funcionou para mim.
Execute o comando:
Agora você precisa criar um novo arquivo (config.js) e adicionar o seguinte código.
Agora você pode escrever instruções de importação sem obter erros.
Espero que isto ajude.
EDITAR:
Você precisa executar o novo arquivo que você criou com o código acima. No meu caso, foi
config.js
. Então eu tenho que correr:EDIT 2:
Ao experimentar, encontrei uma solução fácil para esse problema.
Crie um
.babelrc
arquivo na raiz do seu projeto.Adicione o seguinte (e quaisquer outras predefinições de babel que você precisar, podem ser adicionadas neste arquivo):
Instale
babel-preset-env
usando o comandonpm install babel-preset-env --save
e instalebabel-cli
usando o comandonpm install babel-cli -g --save
Agora, vá para a pasta em que seu servidor ou arquivo de índice existe e execute usando: babel-node fileName.js
Ou você pode executar usando
npm start
adicionando o seguinte código ao seupackage.json
arquivo:fonte
"start": "babel-node electron .",
mas sem sorteErro: SyntaxError: importação inesperada de tokens ou SyntaxError: exportação inesperada de tokens
Solução: altere todas as suas importações como exemplo
E também mude
export default = foo;
paramodule.exports = foo;
fonte
Estou chocado
esm
não foi mencionado. Este pacote pequeno, mas poderoso, permite que você use umimport
ou outrorequire
.Instale o esm no seu projeto
$ npm install --save esm
Atualize seu script de início do nó para usar esm
node -r esm app.js
esm
simplesmente funciona. Perdi muito tempo.mjs
e--experimental-modules
apenas para descobrir um.mjs
arquivo não é possível importar um arquivo que userequire
ormodule.exports
. Este foi um grande problema, ao passo queesm
permite que você misture e combine e ele apenas descobre ...esm
simplesmente funciona.fonte
No caso de você ainda não poder usar "import", aqui está como eu lidei com isso: basta traduzi-lo para um nó amigável. Exemplo:
É o mesmo que:
fonte
export
palavra-chaveexport
palavra - chave, de qualquer forma, obrigado pela sua observação útil!babel 7 proposta você pode adicionar dependências dev
e adicione um .babelrc na raiz
e adicione ao arquivo .js
ou, se você executá-lo no cli, poderá usar o gancho de requisição como -r @ babel / register, ex.
fonte
se você pode usar 'babel', tente adicionar scripts de compilação no pacote.json (- presets = es2015) como abaixo. faz pré-compilar o código de importação para es2015
fonte
npm start
primeiro fazer a "compilação" ou primeiro a "iniciar"? (O início está definido atualmente:"nodemon src/app.js --exec \"npm run lint && node\"",
A partir de Node.js v12 (e esta é provavelmente bastante estável agora, mas ainda marcado "experimental"), você tem um par de opções para utilizar ESM ( E CMA S cript M odules) em Node.js (para arquivos, há uma terceira maneira de avaliar seqüências de caracteres), eis o que a documentação diz:
fonte
Quando eu comecei com o express, sempre quis uma solução para usar a importação, em vez de exigir
Muitas vezes passam por esta linha: -
Unfortunately, Node.js doesn't support ES6's import yet.
Agora, para ajudar outros, crio novas duas soluções aqui
1) esm : -
O carregador de módulo ECMAScript brilhantemente simples, sem babel e sem pacote. vamos fazer funcionar
crie start.js ou use seu espaço para nome
Mudança no seu
package.josn
caminho de passagem destart.js
2) Babel js : -
Isso pode ser dividido em 2 partes
a) Solução 1 graças a timonweb.com
b) Solução 2
use Babel 6 (versão mais antiga do babel-preset-stage-3 ^ 6.0 ) crie um
.babelrc
arquivo na sua pasta raizInstale o babel-preset-stage-3
Mudança no package.json
Inicie seu servidor
Oooh não, criamos um novo problema
Este erro ocorre somente quando você usa async / waitit no seu código. Em seguida, use o polyfill que inclui um tempo de execução do regenerador customizado e core-js. adicione em cima de
index.js
Isso permite que você use assíncrono / espera
use Babel 7
É necessário atualizar tudo em seu projeto, e começar com babel 7 .babelrc
Alguma mudança no package.json
e use
import "@babel/polyfill"
no ponto de partidaVocê está pensando o porquê
start:dev
A sério. É uma boa pergunta se você é novo. A cada mudança que você sempre usa
yarn start:dev
no servidor de inicialização, use como servidor de desenvolvimento todas as alterações no servidor de reinicialização automaticamente para obter mais informações sobre o nodemonfonte
No meu caso, ele estava cuidando do
.babelrc
arquivo e deveria conter algo como isto:fonte