[英]Issue with export node.js
我正在尝试在 node.js 环境中将变量从一个 js 文件导入另一个。 以下是仅包含重要部分的文件 -
文件1.js
var socket = io.connect();
export default socket;
文件2.js
import socket from "./chat.js";
我的 file1.js 显示一个错误,即 Uncaught SyntaxError: Unexpected token 'export'。 我搜索了网络,原因是我试图在节点 js 环境中使用 ES6 导入/导出语法。 所以我使用 esm package 运行了我的 server.js 文件。
节点 -r esm app.js
app.js 文件 -
const express = require('express');
const app = express()
app.get('/', function (req, res) {
res.sendFile(__dirname+'/index.html')
})
app.use(express.static(__dirname))
app.listen(3000, () => console.log('Example app listening on port 3000!'))
这也不起作用,返回意外令牌导出的相同错误。 谁能帮帮我?
注意:- 我的 app.js 文件是一个简单的 express 文件,它使用 file1.js 对 HTML 页面有一个获取请求。
如果您不想使用 ESM 模块语法,则此代码将起作用:
文件 1.js:
const socket = { test: 1 }
module.exports = socket
文件 2.js:
const socket = require('./file1')
console.log(socket)
运行node file2.js
将记录{ test: 1 }
。 它使用节点模块语法而不是 ESM 之一,但它可以工作。
使用可以使用来自ÀLaMode转译器的alanode
二进制文件(与 Babel 的 ~250 不同的是 0 依赖项),它执行基于正则表达式的从导入到 Node 中的模块。
npm i alanode --save-dev
yarn add alanode
然后在 package.json 中添加一个脚本:
{
"name": "your-package",
"scripts": {
"test": "...etc",
"alanode": "alanode"
}
}
之后,您可以使用它运行脚本:
$> npm run alanode -- app
或者如果只使用以下纱线,并且您不需要在 package.json 中添加脚本:
$> yarn alanode app
如果你想在没有alanode
代理的情况下运行标准节点,你需要创建一个需要alamode
的文件,例如src/index.js
:
require('alamode')()
require('./app')
它被称为require 钩子:每个 JS 文件都将首先针对编译 function 运行,以将这些导入更新为require
语句并导出到module.export
分配。 这样,即使您使用普通的 Node.js 运行,导入也会自动转译。 然后你也可以构建你的源代码:
$> yarn alamode src -o build -s
其中-o
是构建文件夹, -s
表示没有您不需要的源映射,因为 output 与原始映射非常相似,只是导入/导出发生了更改。
The difference between yarn
and npm
is that when there's a binary installation of a local dependency (it has bin
in package.json
), yarn
can be used to just run yarn <name-of-bin>
to get it to spawn, but npm
不能,所以您需要为它创建一个脚本,然后添加--
以便通过 arguments。
请注意,如果您的模板字符串使用带有//
的协议,ÀLaMode 可能会中断,例如,
const URL = `ws://localhost`
export default socket
const something else = `test`
所以你需要轻轻地调整代码,比如
const URL = `ws:/` + `/localhost
因为 2 个连续的斜杠会触发评论替换以防止误报。 有点不方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.