Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要来自节点编译脚本的普通javascript文件吗?_Javascript_Node.js_Node Modules - Fatal编程技术网

需要来自节点编译脚本的普通javascript文件吗?

需要来自节点编译脚本的普通javascript文件吗?,javascript,node.js,node-modules,Javascript,Node.js,Node Modules,首先,我想说的是,我对任何与node有关的事情都很陌生。。。 在我陈述我的问题之前,这里有一些示例代码可供参考 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.myMess

首先,我想说的是,我对任何与node有关的事情都很陌生。。。 在我陈述我的问题之前,这里有一些示例代码可供参考

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);
我希望从名为
main.js
的节点编译脚本中获得名为
test.js
的正常外部javascript脚本。我只需在终端中键入
node main.js
即可编译
main.js
。但节点抛出了一个错误“意外令牌导出”。我知道我做错了什么。我使用“模块”吗?如何排除导出语句


感谢阅读,如果我的问题是让人们觉得这个问题有多愚蠢,那就很抱歉了。

Nodejs(alpha版本)还不支持
导出
语法,而Nodejs提供了一个全局对象*(
module.exports
),这就是您通过
require()
调用得到的结果,因此,您只需将“对象”属性设置为要导出的对象:

 const myMessage = 'Bananas';
 module.exports.myMessage = myMessage;
或更短:

 exports.myMessage = 'Bananas';


*“虽然您尚未定义它,但它仍然存在”,实际上,对于执行的每个脚本,都将创建一个新的
模块
对象,该对象只能在该脚本内部访问。

Nodejs中尚不支持
导出
语法(在alpha版本中),相反,Nodejs提供了一个全局对象*(
module.exports
),这是通过调用
require()
得到的,因此您只需将objects属性设置为要导出的对象:

 const myMessage = 'Bananas';
 module.exports.myMessage = myMessage;
或更短:

 exports.myMessage = 'Bananas';


*“虽然您尚未定义它,但它仍然存在”,实际上,对于执行的每个脚本,都将创建一个新的
模块
对象,该对象只能在该脚本内部访问。

我认为您试图要求的外部文件是esModule。除非将这些文件传输到commonJSModule,否则不能直接需要这些文件。你有两个解决方案

  • 使用babel将esModule传输到commonJSModule。(或者在test.js中将export更改为module.exports)
  • 如果使用新的节点版本,可以将其扩展名更改为.mjs(将test.js重命名为test.mjs)
请看这篇媒体文章,它应该会有所帮助


我认为您试图要求的外部文件是esModule。除非将这些文件传输到commonJSModule,否则不能直接需要这些文件。你有两个解决方案

  • 使用babel将esModule传输到commonJSModule。(或者在test.js中将export更改为module.exports)
  • 如果使用新的节点版本,可以将其扩展名更改为.mjs(将test.js重命名为test.mjs)
请看这篇媒体文章,它应该会有所帮助

使用巴别塔寄存器:

并在main.js中要求:

require('@babel/register')({
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          node: true
        }
      }
    ]
  ],
  ignore: [
    /node_modules/
  ]
});
这将通过babel解析不在node_模块中的其他必需文件,因此ES6导入/导出将起作用,并且它还将提供当前版本的node中不存在的polyfill功能(node:true)

注意:只有当您需要无法合理修改的前端脚本时,才应使用此选项。解析每一个需求是非常重要的,因此如果必须,请尽可能严格地设置
ignore
(或者更好地使用
only
选项),以便只解析您需要的内容。

使用babel register:

并在main.js中要求:

require('@babel/register')({
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          node: true
        }
      }
    ]
  ],
  ignore: [
    /node_modules/
  ]
});
这将通过babel解析不在node_模块中的其他必需文件,因此ES6导入/导出将起作用,并且它还将提供当前版本的node中不存在的polyfill功能(node:true)


注意:只有当您需要无法合理修改的前端脚本时,才应使用此选项。解析每一个需求是很重要的,因此如果必须的话,将
ignore
设置得尽可能严格(或者更好地使用
only
选项),这样您只解析您需要的内容。

您所说的“节点编译脚本”是什么意思?在任何情况下,它都应该是
export const myMessage='.myMessage
访问它,则代码>,而不是默认的导出。您所说的“节点编译脚本”是什么意思?在任何情况下,它都应该是
导出常量myMessage='…'
,不是默认导出,如果您希望通过
.myMessage
module.exports.myMessage='Bananas'访问它
module.exports.myMessage='Bananas'