Как контролировать, где NPM находит server.js ?

#javascript #json #node.js #npm

#javascript #json #node.js #нпм

Вопрос:

Я слежу за этим блогом, и в разделе 4 они показывают, как выполнить и запустить приложение. Все работает так, как описано.

Теперь я хотел бы поместить файл server.js , который является точкой входа в каталог под названием app. Однако команда npm start больше не находит это.

После некоторого поиска в Google я прочитал, что я должен вставить следующую строку в package.json, что я и сделал.

«начать»: «app/server.js «,

Проблема в том, что он все еще не может найти его, и я действительно не могу диагностировать проблему. Это потому, что точка входа должна находиться в корневом каталоге? Нужно ли размещать элемент start в определенном порядке в файле JSON? Я неправильно указываю путь (я пробовал «» и «/» и т.д.)?

Ответ №1:

Вы пропускаете вызов node:

 "start": "node app/server.js",
  

Также не забудьте поместить приведенную выше строку в "scripts" раздел package.json .

 "scripts": {
  "start": "node app/server.js",
  ...
},
  

Комментарии:

1. Я уверен, что это одна из проблем, хе-хе. Теперь, когда это исправлено, я получаю ошибку missing script: start . Что еще это может быть? Или это вопрос для нового вопроса?

2. Одна вещь, которая может быть, это то, что "start: "node app/server.js"" не находится в "scripts" части вашего "package.json" .

3. Раздел глупых скриптов … Глупый элемент start … Глупые NodeJS … (неразличимое бормотание …) Потрясающе! Это сделало свое дело. Я новичок в этом, так что это почти забавно. Почти. 🙂

4. Нет проблем, приятель, мы все были там, рады помочь 🙂

5. Я взял на себя смелость вставить комментарии в ответ, чтобы сделать его из отличного совершенным.

Ответ №2:

Значение scripts.start в вас package.json указано как команда, которая будет выполняться при каждом вашем выполнении npm start . Это означает, что любое значение, которое вы туда введете, будет запускаться непосредственно как исполняемый файл, так что это не просто вопрос указания пути.

Теперь у вас есть два варианта устранения вашей проблемы:

  • Укажите полную команду: node app/server.js .
  • Создайте app/server.js исполняемый файл: установите его исполняемый бит ( chmod x app/server.js ) и добавьте строку hashbang в файл ( #!/usr/bin/env node в качестве первой строки файла)

Ответ №3:

Клавиша ‘start’ в разделе скрипты package.json описывает скрипт, который должен быть запущен npm при выполнении ‘npm start’.

 ...

"scripts": {
    "start": "node app/server.js"
}

...
  

Однако некоторые серверы могут выбрать запуск приложения другими возможными способами. Имеет смысл также определить main файл в качестве отправной точки вашего приложения. Это можно сделать следующим образом:

 ...

"main": "app/server.js",
"scripts": {
    "start": "node app/server.js"
}

...
  

Комментарии:

1. Я думал, что main должен был указывать на index.js начальной страницы. Но, возможно, это упрощение, которым я обманут?

2. Это отправная точка приложения. В основном файл, который должен быть выполнен node для запуска приложения. Это может называться как угодно, включая index.js . Если «основной» ключ отсутствует, node ищет index.js файл по умолчанию в текущем рабочем каталоге для выполнения.

3. Очень полезно. Итак, у меня мог бы быть любой элемент в файле JSON? Например. это работало бы с «donkey»:»node bazinga/shazoo.js » если я выполню npm donkey ?

4. Нет. Таким образом, ‘start’ является особенным. Если бы у вас был "donkey":"node bazinga/shazoo.js" раздел скриптов в package.json, вы бы выполнили его как npm run donkey .