использовать модули импорта ES6 с pkg - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь упаковать приложение узла как exe, используя pkg, и я хотел бы использовать импорт 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`))

в моем 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 start отлично работает

$ npm start

> iisnode-pkg@1.0.0 start C:\data\devel\apps\tmp\iisnode-pkg
> node --experimental-modules src/app.js

(node:10668) ExperimentalWarning: The ESM module loader is experimental.
welcome to iisnode-pkg
iisnode-pkg listening on http://localhost:3000

, но npm run build дает замедление, а затем запускается exe, выдаетошибка:

>npm run build

> iisnode-pkg@1.0.0 build 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
> Warning Failed to make bytecode node12-x64 for file C:\snapshot\iisnode-pkg\src\app.js
>iisnode-pkg.exe
C:\snapshot\iisnode-pkg\src\app.js:2
import express from 'express'
       ^^^^^^^

SyntaxError: Unexpected identifier
    at Module._compile (internal/modules/cjs/loader.js:701:23)
    at Module._compile (pkg/prelude/bootstrap.js:1268:32)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:768:10)
    at Module.load (internal/modules/cjs/loader.js:626:32)
    at Function.Module._load (internal/modules/cjs/loader.js:553:12)
    at Function.Module.runMain (pkg/prelude/bootstrap.js:1316:12)
    at internal/main/run_main_module.js:17:11

Похоже, что параметр --options experimental-modules из сценария сборки в package.json не является биговским.

Любая идея, как я могу использовать ES6импорт модуля из приложения узла, упакованного с pkg?

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Убедитесь, что вы используете довольно свежую версию Node. Реализация ESM в Node.js изменилась в версии 12.0.0. "type": "module" не поддерживался в 10.x.

Вам необходимо добавить options в конфигурацию pkg. Итак, в package.json:

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

Узловая документация: https://nodejs.org/api/esm.html

1 голос
/ 16 октября 2019

Пытается переименовать app.js в app.mjs

...