Скрипт npm: браузер открыт с использованием узла, но без использования babel - PullRequest
0 голосов
/ 27 ноября 2018

Первые дни в разработке моего первого скрипта 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 с использованием узла открывается окно браузера."Привет, мир!"на дисплее, и управление терминалом должно быть восстановлено с помощью CTRL-C.-> Все в порядке.

Если я подставлю в babel путь, как показано выше (что является результатом тех же проблем, описанных в в этом посте ), код buildScriptsотображается в терминале, но окно браузера не открывается, и управление терминалом прекращается сразу после завершения.Отладчик npm не дает полезных отзывов.-> Что-то не работает ..

Как "Hello World!"код корректно просматривается с использованием узла (и остается неизменным для обхода babel), он не является источником проблемы.

Здесь мои файлы конфигурации 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):

$ which node
/home/<myusername>/.nvm/versions/node/v10.13.0/bin/node

$ which nodejs
/usr/bin/nodejs

Однако, поскольку все, что связано с узлом и npm, было установлено с использованием nvm, это не должно быть проблемой .

Я мог бы, я полагаю, попробовать установка babel глобально , но с этим широко нахмурившимся апоном.Я бы предпочел решение, отражающее «лучшие практики».

Спасибо за любые предложения.

1 Ответ

0 голосов
/ 28 ноября 2018

В более ранние годы материал преподавателя предполагал, что 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!"отображается в только что открытом окне браузера.

Просто надеюсь, что это пригодится кому-то еще ..; -)

...