我正在使用Node.js编写应用程序。具体来说,我正在使用Node v10.3.0。这个应用程式位于./my-module-console/index.js
的目录中。这个应用程式的{.1}}中有一个package.json文件。该应用引用了./my-module-console/package.json
中定义的类。应当注意,./my-module/items/
代表其自己的程序包。该包在my-module
中定义。 index.js中的代码如下:
./my-module/package.json
当我尝试运行此命令时,出现以下错误:
'use strict';
import { Item } from '../my-module/items/item.js';
async function entry() {
let item = await Item.FindById(1);
console.log(item);
}
entry();
我的导入语句有什么问题?在我看来,这是正确的。我误会了吗?
item.js
import { Item } from '../my-module/items/item.js';
^
SyntaxError: Unexpected token {
谢谢!
答案 0 :(得分:4)
如@jsur所述,ES模块仍处于试验阶段。但是,如果要使用它们,则必须添加--experimental-modules
。如果仍要使用ES模块,则必须将.js重命名为.mjs ,同时还要将item.js(现在是commonJS样式)更改为ES Modules +其他小的修复方法。同样,您也不必真的使用'use strict',默认情况下它是严格的。所以最后看起来应该像这样:
index.mjs
import { Item } from '../my-module/items/item';
async function entry() {
let item = await Item.FindById(1);
console.log(item);
}
entry();
item.mjs
export class Item {
constructor() {}
static async FindById(id) {
console.log('finding item by id: ' + id);
}
}
因此,现在执行node --experimental-modules index.mjs
,就可以了。
答案 1 :(得分:0)
import { Item } from '../my-module/items/item.js';
是用于从Javascript模块导入导出的ES6语法。目前,Node在没有其他标志的情况下不支持此功能,因此您必须改为使用require
:
const item = require('../my-module/items/item');
这样,您将需要在Item
中导出类item.js
。
还请注意,您必须创建要导出的类的实例,才能在index.js
中使用其功能。
答案 2 :(得分:0)
第一:
class Item {
constructor() {}
async static FindById(id) {
console.log('finding item by id: ' + id);
}
};
module.exports.Item = Item; // change this line
第二:
'use strict';
// import { Item } from '../my-module/items/item.js'; // not sure if it work, it work in react, but in regular node.js can be wrong (look doc ES6)
const Item = require('../my-module/items/item.js');
var someitem = new Item();
async function entry() {
let item = await someitem.FindById(1);
console.log(item);
}
entry();
答案 3 :(得分:0)
导入目前处于实验阶段。 根据文档
--experimental-modules标志可用于启用以下功能: 加载ESM模块。
设置好之后,以.mjs结尾的文件将可以 作为ES模块加载。
node --experimental-modules my-app.mjs
答案 4 :(得分:0)
class myClass
{
public:
myClass(bool& iBool)
{
t = thread(&myClass::myMethod,this,iBool);
}
~myClass()
{
t.join();
}
private:
thread t;
void myMethod(bool& iBool)
{
this_thread::sleep_for(chrono::seconds(1));
if(iBool)
cout << "It's safe!" << endl;
else
cout << "It's NOT safe!!!" << endl;
}
};
void main()
{
bool passedBool = true;
cout << "Passing true" << endl;
myClass mmyClass(passedBool);
cout << "Changing value for false" <<endl;
passedBool = false;
cout << "Expect \"It's NOT safe!!!\"" <<endl;
}
。
使用实验模块用于实验即开发环境。重命名为.mjs并不是一个好主意,因为最终它将改变。
如果要使用babel js:在ES6中编写代码并编译并运行它。
(可选)
以下是您快速解决问题并继续前进的方法:
Import