Javascript 将ES6导入模块与pkg一起使用

Javascript 将ES6导入模块与pkg一起使用,javascript,node.js,import,es6-modules,Javascript,Node.js,Import,Es6 Modules,我正在尝试使用pkg将节点应用程序打包为exe,我想使用ES6导入 我的src/app.js中有类似的内容: import express from 'express' const app = express() const eco = (req, res) => { const { method, url, headers, query } = req res.json({ method, url, headers, query }) } app.all('/', eco)

我正在尝试使用pkg将节点应用程序打包为exe,我想使用ES6导入

我的src/app.js中有类似的内容:

import express from 'express'
const app = express()

const eco = (req, res) => {
  const { method, url, headers, query } = req
  res.json({ method, url, headers, query })
}

app.all('/', eco)

app.listen(3000, () => console.log(`listening on http://localhost:3000`))
在my package.json中,我有:

{
  "name": "pkg-test",
  "version": "1.0.0",
  "description": "",
  "main": "src/app.js",
  "type": "module",
  "type": "module",
  "scripts": {
"build": "pkg --targets=node12-win-x64 --output=iisnode-pkg.exe --options experimental-modules src/app.js",
    "start": "node --experimental-modules src/app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "pkg": "^4.4.0"
  }

}
npm启动工作正常

$npm开始
>斯诺德-pkg@1.0.0启动C:\data\devel\apps\tmp\iisnode pkg
>节点——实验模块src/app.js
(节点:10668)实验警告:ESM模块加载程序是实验性的。
欢迎来到iisnode pkg
iisnode pkg正在侦听http://localhost:3000
但是
npm run build
给出一个衰减,然后运行exe抛出一个错误:

>npm运行构建
>斯诺德-pkg@1.0.0生成C:\data\devel\apps\tmp\iisnode pkg
>pkg--targets=node12-win-x64--output=iisnode-pkg.exe src/app.js--config package.json
> pkg@4.4.0
>警告:为文件C:\snapshot\iisnode pkg\src\app.js生成字节码node12-x64失败
>iisnode-pkg.exe
C:\snapshot\iisnode pkg\src\app.js:2
从“express”导入express
^^^^^^^
SyntaxError:意外的标识符
at模块编译(内部/modules/cjs/loader.js:701:23)
编译模块(pkg/prelude/bootstrap.js:1268:32)
在Object.Module._extensions..js(internal/modules/cjs/loader.js:768:10)
在Module.load(内部/modules/cjs/loader.js:626:32)
at Function.Module._load(内部/modules/cjs/loader.js:553:12)
在Function.Module.runMain(pkg/prelude/bootstrap.js:1316:12)
在internal/main/run\u main\u module.js:17:11
似乎没有考虑package.json中构建脚本中的
--options-experimental modules
参数


知道如何使用从打包了pkg的节点应用程序导入的ES6模块吗?

尝试将
app.js
重命名为
app.mjs
确保运行的是最新版本的节点。

您需要添加到
pkg
配置中。 因此,在
package.json
中:

"pkg": {
    "options": ["experimental-modules"]
}

节点文档:

他已经在他的
包.json中有了
“type”:“module”
,所以不管怎样它都应该工作。这仍然有效吗?我很想知道如何在package.json中放置
实验模块
need,但是您链接到的页面没有提到
pkg
选项
(命令行选项除外)。