繁体   English   中英

出口问题 node.js

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM