как разрешить npm package bin работать с опцией experimental-modules?
Начиная с узла v8. 5. 0, поддержка модулей стиля ES6
import x from 'x'
Был доступен при запуске узла с помощью опции --experimental-modules
, как показано ниже:
node --experimental-modules test.mjs
Используя ключ bin
в package.json
Вы можете легко создать cli tools npm cli, запустив npm link
.
--experimental-modules
.
Как можно использовать модули bin
с модулями --experimental-modules
?
Вот пример: пример
Bin / healthcheck.mjs
import { connect } from 'amqplib'
let open = connect(process.env.RABBITMQ_URL);
const exit = ({healthy = true}) => {
return healthy ? process.exit(0) : process.exit(1)
}
open.then(() => {
exit({healthy: true})
}).catch((e) => {
exit({healthy: false})
})
Пакет.json
{
"name": "my-cli",
"bin": {
"healthcheck": "./bin/healthcheck.mjs"
}
}
Бежит...
> npm link
> healthcheck
/usr/local/bin/healthcheck: line 1: import: command not found
/usr/local/bin/healthcheck: line 3: syntax error near unexpected token `('
/usr/local/bin/healthcheck: line 3: `let open = connect(process.env.RABBITMQ_URL);'
2 ответа:
Вы можете использовать shebang в верхней части скрипта
#!/bin/sh ":" //# comment; exec /usr/bin/env node --experimental-modules "$0" "$@"
Подробнее здесь: http://sambal.org/2014/02/passing-options-node-shebang-line/
Я не уверен, что вы имели в виду со скриптом
bin
, но вы можете установить аргумент по умолчанию в пакете.JSON файл, как показано ниже ("start": "node --experimental-modules app.js"
):{ "name": "test_modules", "version": "0.0.2", "private": true, "scripts": { "start": "node --experimental-modules app.js" } }, "dependencies": { "@types/express": "^4.0.39", "body-parser": "1.17.x", "express": "4.15.x", "method-override": "2.3.x" }, "repository": {}, "engines": { "node": ">=9.5" } }
PS: Если вы используете код visual studio, вы можете установить флаг отладки и добавить его в файл
launch.json
внутри объектаconfigurations
:" runtimeArgs": [ "--experimental-modules", " ${workspaceFolder} / app.JS" ]
PS2: модули должны иметь *.расширение mjs, так что он работает импорт заявление!