2017-02-14 10 views
3

Я немного смущен тем, как работает webpack. Если вы запустите npm install examplePackage в своем корневом директоре, устанавливает ли этот пакет на ваш жесткий диск? Значит ли это, что вы можете импортировать этот пакет в любое время в любом файле? Как это отличается от запуска npm install examplePackage внутри вашего проекта? Это потому, что тогда, когда вы нажмете свой проект на Github, будет доступен package.json для других людей и убедитесь, что у них есть необходимые библиотеки для запуска вашего приложения? Как известно узлу для поиска через ваш проект для пакета или вашего жесткого диска? Он просто проверяет вашу библиотеку, а затем, если она не находит ее, она будет выглядеть на вашем жестком диске?Глобальная установка веб-пакета и установка конкретного веб-пакета проекта

ответ

3

npm install examplePackage установит пакет в node_modules текущего каталога. Когда вы импортируете модуль в Node.js с require('examplePackage'), он сначала проверяет, является ли он основным модулем (например, fs). Если он не является основным модулем, он начинает искать в node_modules текущего каталога. Если модуль не найден в этом каталоге, он перемещается в родительский каталог и проверяет его каталог node_modules. И так до тех пор, пока не будет найден модуль или не будет достигнут корень файловой системы. См. https://nodejs.org/api/modules.html#modules_loading_from_node_modules_folders

Это действительно означает, что вы можете импортировать пакет, который был установлен в /, из любой точки вашей файловой системы. Хотя можно было бы установить все зависимости в /, есть много преимуществ наличия зависимостей по конкретным проектам. Наверное, самым большим преимуществом является то, что вы можете легко поделиться своим проектом с другими, и вы можете быть уверены, что он будет работать для них (при условии совместимости версии Node.js).

Как известно узлу для поиска через ваш проект для пакета или вашего жесткого диска?

Он выглядит только на вашем жестком диске, в частности, в каталогах node_modules, как указано выше. Как вы заметили, вы можете указать зависимости в package.json, но сам узел ничего не делает с этой информацией. Вместо этого вам нужно запустить npm install, это установит все перечисленные зависимости в package.json. После этого вы можете правильно импортировать эти модули.

Примечание:npm install examplePackage не добавляет examplePackage к вашему package.json, он просто устанавливает его. Если вы хотите добавить его в качестве зависимости, используйте npm install --save examplePackage или как devDependency с npm install --save-dev examplePackage. https://docs.npmjs.com/cli/install

CLI

утилиты командной строки или вообще пакеты с исполняемыми, такие как WebPack, доступны в node_modules/.bin и для того, чтобы выполнить их, они должны быть либо в вашей оболочки PATH или вызывается непосредственно. Потому что очень часто, когда проект вызывает локально установленные исполняемые файлы, вы можете использовать их в разделе scriptspackage.json без префикса их node_modules/.bin. Например, чтобы запустить WebPack можно определить сценарий:

"scripts": { 
    "build": "webpack" 
} 

А затем запустить npm run build вместо того, чтобы бежать ./node_modules/.bin/webpack. Дополнительная информация о скриптах: https://docs.npmjs.com/misc/scripts

+0

Для webpack, если вы npm устанавливаете webpack -g', и вы запускаете 'npm build', не будет ли он работать, потому что он не установлен локально для вашего проекта?Если вы поместите часть сценария, подобную той, которую вы сделали выше, в пакете. Json, сможет ли она по-прежнему находить веб-пакет в корневом каталоге? – stackjlei

+0

Он будет работать, если он находится в 'PATH' вашей оболочки. Глобально установленные (с пакетом '-g') должны быть в вашем' PATH' (большинство установок Node.js это сделают или расскажут, как это сделать). –

 Смежные вопросы

  • Нет связанных вопросов^_^