Скрипт npm: браузер открыт с использованием узла, но без использования babel
Первые дни в разработке моего первого скрипта npm, и немного боролись. Я на Ubuntu LTS с последними выпусками nvm, node, npm и pnpm.
Узел + npm был установлен с использованием nvm, pnpm установлен с использованием npm, а несколько модулей установлены локально (т. Е. Без флага -g) с использованием pnpm. Судо не было необходимости. Полученный package.json:
{
"name": "javascript-development-environment",
"version": "1.0.0",
"description": "JavaScript development environment cobbled together using various online sources",
"scripts": {
"prestart": "./node_modules/.bin/babel buildScripts/startMessage.js",
"start": "./node_modules/.bin/babel buildScripts/srcServer.js"
},
"author": "Laird o' the Windy Waas",
"license": "MIT",
"dependencies": {
"@babel/polyfill": "^7.0.0"
},
"devDependencies": {
"@babel/cli": "^7.1.5",
"@babel/core": "^7.1.6",
"@babel/preset-env": "^7.1.6",
"chalk": "^2.4.1",
"express": "^4.16.4",
"open": "^0.0.5",
"path": "^0.12.7"
}
}
Когда установлен только Firefox 60.0.1, при выполнении "запуска pnpm" с использованием узла открывается окно браузера "Hello World!" на дисплее, и управление терминалом должно быть восстановлено с помощью CTRL-C. -> Все ок.
Если я подставлю в babel, используя путь, как показано выше (который является результатом тех же проблем, описанных в этом посте), код buildScripts отображается на терминале, но окно браузера не открывается, и управление терминалом сразу же завершается после завершения. Отладчик npm не предоставляет полезной обратной связи. -> Что-то не работает..
Как и "Привет, мир!" код перебирается правильно с использованием узла (и остается неизменным для обхода вавилона), это не является источником проблемы.
Вот мои файлы конфигурации Babel:
.babelrc
{
"presets": [
"@babel/preset-env"
]
}
babel.config.js
const presets = [
[
"@babel/env",
{
targets: {
edge: "17",
firefox: "61",
chrome: "67",
safari: "11.1",
opera: "56"
},
useBuiltIns: "usage"
},
],
];
module.exports = { presets };
Проблема заключается в том, что babel не передает переданный код в nodejs / express. Должно быть что-то простое, но я просто хожу по кругу..
Одна вещь, которую я задался вопросом: может ли быть конфликт между различными пресетами env? .babelrc
, babel.config.js
а также package.json
, Последовательная парковка .babelrc
а также babel.config.js
файлы, однако, не принесли изменений / продвижения.
Я также заметил, что оба узла (nvms) и (ubuntus) nodejs установлены:
$ which node
/home/<myusername>/.nvm/versions/node/v10.13.0/bin/node
$ which nodejs
/usr/bin/nodejs
Однако, поскольку все, что связано с узлом и npm, было установлено с использованием nvm, это не должно быть проблемой.
Я мог бы, я полагаю, попытаться установить babel глобально, но с этим широко нахмурившимся апоном. Я бы предпочел решение, отражающее "лучшую практику".
Спасибо за любые предложения.
1 ответ
В более ранние годы, материал преподавателя предложил babel-node
начнется npm
/ node
(и поэтому express
) от имени пользователя.
babel-node
теперь, кажется, больше не признается. Попытки использования babel-node
команда завершилась неудачно, и простое использование узла на ее месте привело к выводу данных транспилятора в терминал.
babel
, (в нашем случае) pnpm
, а также node
теперь должны быть явно вызваны, последний ссылается на переданный код. node
кажется, чтобы справиться с express
,
Поэтому после некоторого эксперимента следующие изменения (в package.json
), кажется, работает нормально:
"scripts": {
"prestart": "./node_modules/.bin/babel buildScripts/startMessage.js -d dist",
"build": "./node_modules/.bin/babel buildScripts/srcServer.js -d dist",
"start": "pnpm run build && node dist/startMessage.js && node dist/srcServer.js"
},
Это приводит как к аккуратному выводу на консоль, так и к "Hallo World!" отображается в только что открывшемся окне браузера.
Просто надеюсь, что это пригодится кому-то еще..;-)