首先,我想说明我对与节点有关的任何事情都是新手... 在陈述问题之前,这里有一些示例代码可供参考。
test.js
//test.js
const myMessage = 'Bananas';
export default myMessage; // Im not to sure about this line (problem)
main.js
//main.js
const test = require('./test.js');
console.log(test.myMessage);
我想从一个名为test.js
的节点编译脚本中获取一个名为main.js
的普通外部javascript脚本。我只需在终端中输入main.js
即可编译node main.js
。但是节点吐出一个错误“意外的令牌导出”。我知道我在这里做错了。我是否使用“模块”?如何排除出口声明?
感谢您的阅读,如果我的问题使人们对这个问题看起来有多愚蠢,则表示抱歉。
答案 0 :(得分:4)
我认为您要尝试的外部文件是 esModule 。除非您将它们转换为 commonJSModule ,否则这些文件将不是直接需要的。您有两种解决方案。
请查看这篇对您有帮助的中型文章。
答案 1 :(得分:1)
Nodejs(在Alpha版本中)尚不支持export
语法,而是Nodejs提供了一个全局对象*(module.exports
),这是您从{{1}中学到的}调用,因此您只需要将该对象属性设置为要导出的对象即可:
require()
或更短:
const myMessage = 'Bananas';
module.exports.myMessage = myMessage;
* global的意思是“尽管没有定义,它仍然存在”,实际上对于每个执行的脚本,都会创建一个新的 exports.myMessage = 'Bananas';
对象,该对象只能在该脚本内部访问。
答案 2 :(得分:1)
使用babel寄存器:https://babeljs.io/docs/en/babel-register
npm install @babel/core @babel/register @babel/preset-env --save
并在您的main.js中要求它:
require('@babel/register')({
presets: [
[
'@babel/preset-env',
{
targets: {
node: true
}
}
]
],
ignore: [
/node_modules/
]
});
这将通过babel解析node_modules中没有的其他必需文件,因此ES6导入/导出将起作用,并且还将填充您当前版本的节点(node:true)中不存在的polyfill功能。
请注意,仅当您需要无法合理修改的前端脚本时,才应使用此选项。解析每个需求非常重要,因此如果需要,请使ignore
尽可能严格(甚至最好使用only
选项),以便仅解析所需内容。