簡體   English   中英

為什么在node.js 9中導出和導入錯誤?

[英]why export and import error in node.js 9?

我正在學習javascript不久。 我制作了兩個文件,如下所示。 app.js:

import * as  Conf from './conf'
console.log(Conf.a)

conf.js:

export let a = 1

我只是在控制台中運行命令:

node app.js

這是錯誤的。 錯誤信息:

(function (exports, require, module, __filename, __dirname) { import * 
as Conf from './conf'

SyntaxError: Unexpected token import

誰能告訴我為什么? 以及有關javascript和babel等的信息。 我對這些概念不太熟悉。 謝謝。

每年都會推廣一個新的JavaScript規范,稱為ECMA 2015(ES6),ECMA 2016(ES7),ECMA 2017(ES8)...

每個規范都描述了javascript必須具備的功能。

市場上存在多個JavaScript引擎:

  • Google(和節點)的V8
  • 來自微軟的Chakra
  • 來自Mozilla的Rhino

等等

這些引擎試圖遵守規范,但並非100%兼容。

在這里,您可以看到有關引擎和ES6的兼容性表。

在此處輸入圖片說明


您現在可以想象的問題是:“為什么要立即使用全新的ES8?”。 有兩個答案:要么等待node.js實施它,要么使用像Babel這樣的編譯器

Babel將您執行的代碼轉換為與node.js完全兼容的舊規范(ES5)。

例如,您要使用import (ES6功能)。 Babel會將您的import轉換為require以便node.js可以執行它。

使用轉譯器非常有用且強大,因此您可以立即使用最后一個可提高開發人員團隊生產力的功能。


就像@Tuan Anh Tran所說的那樣,您可以使用一個標記對node.js進行運行以運行其實驗性功能,這些功能代表其當前正在實現的功能(對於生產而言並不是特別安全)


是有關ES6功能的文章。

是有關ES7功能的文章。

這里介紹ES8的功能。

import是ESM關鍵字,處於實驗階段。 請參閱ESM 上的 Node.js 文檔

如果您真的想使用它,則可以使用babel或使用--experimental-modules標志運行您的應用程序, --experimental-modules將文件.mjs擴展名

正如其他答案已經指出的那樣,關鍵字importexport是實驗性的。
這就是為什么我建議使用require()

您的app.js

let conf = require("./conf");
console.log(conf.a);

您的conf.js

let a = 1;
exports.a = a;

然后, node app.js將向控制台輸出1

您需要安裝Babel或其他編譯器,才能在NodeJS中使用ES6導入/導出。

您可以在這里找到Babel安裝: https//babeljs.io/docs/setup/#installation

您也可以使用NodeJS模塊加載系統。
文件: https//nodejs.org/api/modules.html

在您的情況下:

app.js

var conf = require('./conf');
console.log(conf);

conf.js

let a = 1;
module.exports = a;

要么

app.js

var conf = require('./conf');
console.log(conf.a);

conf.js

let a = 1;
exports.a = a;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM