Estou tentando executar algum código ES6 no meu projeto, mas estou recebendo um erro inesperado de exportação de token.
export class MyClass {
constructor() {
console.log("es6");
}
}
javascript
ecmascript-6
webpack
babel
Jason
fonte
fonte
export
está disponível apenas no ES6, e são esses módulos que fornecem suporte ao ES6.module.exports = MyClass
, nãoexport class MyClass
Respostas:
Você está usando a sintaxe do módulo ES6.
Isso significa que seu ambiente (por exemplo, node.js) deve suportar a sintaxe do módulo ES6.
O NodeJS usa a sintaxe do módulo CommonJS (
module.exports
) e não a sintaxe do módulo ES6 (export
palavra-chave).Solução:
babel
pacote npm para transpilar seu ES6 para umcommonjs
destinoou
Exemplos de sintaxe CommonJS são (de flaviocopes.com/commonjs/ ):
exports.uppercase = str => str.toUpperCase()
exports.a = 1
fonte
import
nativamente? Eu pensei que v10.0.0 teria, mas aparentemente não.Caso você receba esse erro, ele também pode estar relacionado à forma como você incluiu o arquivo javascript na sua página html. Ao carregar os módulos, você deve declarar explicitamente esses arquivos como tal. Aqui está um exemplo:
Quando você inclui o script assim:
Você receberá o erro:
Você precisa incluir o arquivo com um atributo de tipo definido como "módulo":
E então funcionará conforme o esperado e você estará pronto para importar seu módulo em outro módulo:
fonte
type
se espera que seja um tipo mime válido (também conhecido como tipo de mídia), portanto, essa foi uma descoberta inesperada. Obrigado!<script type="module">import ...</script>
quando importar do módulo. Eu testei na versão recente do Chromium.Meus dois centavos
Exportar
ES6
CommonJS Alternative
Padrão de exportação
ES6
CommonJS Alternative
Espero que isto ajude
fonte
Para usar o ES6, adicione
babel-preset-env
e no seu
.babelrc
:Resposta atualizada graças ao comentário @ghanbari para aplicar babel 7.
fonte
babel
pelo autor. Enquanto a resposta de Phil Ricketts esclarece o problema, o que é bom, essa resposta é uma solução direta para o problema do autor.Não há necessidade de usar o Babel neste momento (o JS se tornou muito poderoso) quando você pode simplesmente usar as exportações padrão do módulo JavaScript. Veja o tutorial completo
Message.js
app.js
fonte
Instale os pacotes babel
@babel/core
e@babel/preset
que converterão o ES6 em um destino commonjs, já que o nó js não entende os destinos do ES6 diretamentenpm install --save-dev @babel/core @babel/preset-env
Em seguida, você precisa criar um arquivo de configuração com o nome
.babelrc
no diretório raiz do seu projeto e adicionar esse código lá{ "presets": ["@babel/preset-env"] }
fonte
Corrigi isso criando um arquivo de ponto de entrada como.
e qualquer arquivo que eu importei dentro
app.js
e além trabalhou comimports/exports
agora você apenas executa comonode index.js
Nota: se
app.js
usadoexport default
, isso se tornarequire('./app.js').default
ao usar o arquivo do ponto de entrada.fonte
O uso da sintaxe do ES6 não funciona no nó, infelizmente, você precisa ter o babel aparentemente para fazer o compilador entender a sintaxe, como exportação ou importação.
Agora precisamos criar um arquivo .babelrc. No arquivo babelrc, definiremos o babel para usar a predefinição es2015 que instalamos como predefinição ao compilar no ES5.
Na raiz do nosso aplicativo, criaremos um arquivo .babelrc. $ npm install babel-preset-es2015 --save
Na raiz do nosso aplicativo, criaremos um arquivo .babelrc.
Espero que funcione ... :)
fonte