javascript - ES6 导入失败
问题描述
这是我实现的 SingleLinkedList,
export default class SinglyLinkedList{
constructor(){
this.head = null;
this.size = 0;
}
insert(item){
this.size ++;
let p = new Node(item);
if(this.head === null){
this.head = p;
}
else{
p.next = this.head;
this.head = p;
}
}
remove(item){
let curr, prev;
prev = curr = this.head;
if(item === curr.val){
this.head = this.head.next;
this.size --;
return;
}
while(curr !== null){
if (curr.val === item){
prev.next = curr.next;
this.size --;
return;
}
prev = curr;
curr = curr.next;
}
throw "Item doesn't exist in list."
}
length(){
return this.size;
}
printList(){
let curr = this.head;
let out = [];
while(curr !== null){
if(curr.next === null){
out.push(curr.val);
}else{
out.push(curr.val);
out.push("->")
}
curr = curr.next;
}
return out.join("");
}
}
class Node{
constructor(val){
this.val = val;
this.next = null;
}
}
如果我将调用代码与数据结构的实现放在同一个文件中,则此代码有效,但是我想将调用代码分离到不同的文件中。
我以以下方式在 main.js 中调用它,
import SinglyLinkedList from './singlyLinkedList';
const list = new SinglyLinkedList();
list.insert(12);
list.insert(9);
list.insert(13);
list.insert(17);
console.log(list.printList());
list.remove(12);
console.log(list.printList());
console.log(list.length());
console.log(list.is_empty());
list.insertAt(21, 2);
console.log(list.printList());
当我使用节点运行文件时,它失败并出现以下错误,
$|~/Dropbox/js/data-structures-js |=>node main.js
/Users/melissa/Dropbox/js/data-structures-js/main.js:1
(function (exports, require, module, __filename, __dirname) { import SinglyLinkedList from './singlyLinkedList';
^^^^^^^^^^^^^^^^
SyntaxError: Unexpected identifier
at new Script (vm.js:83:7)
at createScript (vm.js:267:10)
at Object.runInThisContext (vm.js:319:10)
at Module._compile (internal/modules/cjs/loader.js:684:28)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
at executeUserCode (internal/bootstrap/node.js:342:17)
我在这里做错了什么,为什么javascript不能对人类友好一点?
解决方案
Node.js 当前(实验性)对 ESM¹ 语法的支持要求您的模块(导入和导出模块)使用扩展名mjs
,以将它们与 Node 的传统 CommonJS-like 模块区分开来。所以main.js
=> main.mjs
,SinglyLinkedList
需要 insinglyLinkedList.mjs
等等。您还需要使用--experimental-modules
标志(并且显然是 Node.js 的最新版本)。
更多在文档中。
¹ = "ESM" = "ECMAScript Module",以区别于其他模块样式,例如 CommonJS、SystemJS、AMD、...
推荐阅读
- java - 在保存实体之前避免 Spring Data JPA 选择
- sql - 如何使用可以采用多个搜索值的搜索过滤器?
- python - 等待带有无头 chrome 元素的网页时出现超时异常
- c# - 在 Hangfire 上运行作业时无法使用实例的属性
- ios - iOS-使用未声明类型的viewcontroller
- python - 在数据框中添加值的问题
- javascript - 如何将 eventListener 添加到第一列的每个单元格?
- php - 手机准备连接mysql意外退出
- php - 如何将 Phalcon 文件对象数组转换为简单的数组数组?
- android - Android Espresso:当视图显示在屏幕上时如何执行操作?