Есть ли способ автоматически собрать файл package.json для проектов Node.js


412

Предполагается ли, что package.json редактируется вручную? Может ли такая программа, как npm, просто просмотреть файлы, просмотреть операторы require и использовать их для помещения необходимых записей в файл package.json? Есть ли такие программы?


2
до сих пор я редактировал файл вручную: добавлял каждый пакет (и минимальную версию), который мне нужен. затем запуститеnpm link
pkyeck

22
@ neuromancer, не могли бы вы принять правильный ответ? Это явно тот, кто набрал 38+ голосов ...
Esteban

2
npmjs.org/doc/install.html , это также можно использовать для автоматического обновления package.json при установке нового пакета
V31

1
@neromancer, отложи свои книги Гибсона и исправь это! :)
prasanthv

1
npmjs.com/package/npm-collect делает именно это и многое другое
coderofsalvation

Ответы:


602

Файл package.json используется npm для изучения вашего проекта node.js.

Используйте npm initдля создания файлов package.json для вас!

Он поставляется в комплекте с Npm. Прочитайте документацию здесь: https://docs.npmjs.com/cli/init.

Кроме того, есть официальный инструмент, который вы можете использовать для программного создания этого файла: https://github.com/npm/init-package-json


9
Спасибо npm initбыло именно то, что я искал! Также после этого я обычно запускаю, npm shrinkwrapчтобы создать npm-shrinkwrap.jsonфайл
Jasdeep Khalsa

75
Per npm init: Используйте npm install <pkg> --saveвпоследствии, чтобы установить пакет и сохранить его как зависимость в файле package.json.
Брэд Кох

5
После запуска npm initв консоли диспетчера пакетов из Visual Studio 2015 он просто отображается [...] Press ^C at any time to quit.и останавливается, ничего не спрашивая и не создавая файл json. Я что-то пропустил?
Майкл Хилус,

2
npmjs.com/package/npm-collect позволяет собирать все уже установленные модули
coderofsalvation

3
npm init --force --yesявляется одним вкладышем для создания этого файла
Бернхард Доблер

204

Сначала беги

npm init

... задаст вам несколько вопросов ( сначала прочтите это ) о вашем проекте / пакете, а затем создайте для вас файл package.json.

Затем, когда у вас есть файл package.json, используйте

npm install <pkg> --save

или

npm install <pkg> --save-dev

... установить зависимость и автоматически добавить его в свой package.json«s dependenciesсписок.

(Примечание. Возможно, вам придется вручную настроить диапазоны версий для ваших зависимостей.)


6
Кажется, он не создает package.json сейчас. win7x64 node0.10.9
atian25

33
Я не очень ценю, что мой ответ полностью, за исключением строки, переписан и все еще приписан мне. Независимо от того, был ли он устаревшим.
nzondlo

Конкретная документация по npm init находится здесь
shmim

1
Это должен быть правильный ответ. Вам не всегда нужно вручную прикасаться package.json, это обычно обрабатывается автоматически.
Саллар

1
--saveбольше не требуется в новых версиях npm
Дэвид Калланан,

180

Я просто написал простой скрипт для сбора зависимостей в ./node_modules. Это соответствует моему требованию на данный момент. Это может помочь некоторым другим, я выкладываю это здесь.

var fs = require("fs");

function main() {
  fs.readdir("./node_modules", function (err, dirs) {
    if (err) {
      console.log(err);
      return;
    }
    dirs.forEach(function(dir){
      if (dir.indexOf(".") !== 0) {
        var packageJsonFile = "./node_modules/" + dir + "/package.json";
        if (fs.existsSync(packageJsonFile)) {
          fs.readFile(packageJsonFile, function (err, data) {
            if (err) {
              console.log(err);
            }
            else {
              var json = JSON.parse(data);
              console.log('"'+json.name+'": "' + json.version + '",');
            }
          });
        }
      }
    });

  });
}

main();

В моем случае вышеприведенный скрипт выводит:

"colors": "0.6.0-1",
"commander": "1.0.5",
"htmlparser": "1.7.6",
"optimist": "0.3.5",
"progress": "0.1.0",
"request": "2.11.4",
"soupselect": "0.2.0",   // Remember: remove the comma character in the last line.

Теперь вы можете скопировать и вставить их. Радоваться, веселиться!


39
Вы должны опубликовать это как модуль npm
Ben

что вы делаете, когда получаете 770 строк назад? У меня есть только 58 в package.json, включая devDependencies: - /
Sherzod

3
Обратите внимание, что встроенный npm ls --depth=0будет печатать более или менее так же (не уверен, если это было в 2012 году, хотя)
jakub.g

3
Это не правильный способ справиться с этим. Это выведет каждую зависимость в каждом модуле. Так что, если ваш пакет необходим пакет aи пакет aнуждается пакетов bи c, этот скрипт будет выводить все уровни, поэтому a, b, cчто не правильно. Должен только выводиться a, подпакеты будут автоматически разрешены.
Саллар

Это я, или кажется, что большинство ответов предполагают, что вы не запускаете существующую систему, где node_modules были скопированы или собраны вручную? Бывают случаи, когда мне вручают папку проекта с закрытыми модулями, и у меня нет доступа к хранилищу. Я все еще хочу автоматизировать воссоздание проекта, как только я добавлю модули в МОЙ репозиторий. Или, возможно, мне сказали «просто скопировать эту папку node_modules». да, да, лучшие практики, но я имею дело с реальностью разработчиков, которые могут не знать, что они делают. Это помогает мне начать выправлять такой проект. Спасибо, что поделился!
noelhx

82

npm init

создать файл package.json, а затем вы используете

ls node_modules/ | xargs npm install --save

заполнить модули, которые есть в папке node_modules.

Изменить: @paldepind указал, что вторая команда является избыточной, потому что npm initтеперь автоматически добавляет то, что у вас есть в вашей папке node_modules /. Я не знаю, было ли это всегда так, но теперь, по крайней мере, это работает без второй команды.


5
Это очень полезно, если вы не использовали --save для каждого установленного вами модуля.

7
Я обнаружил, что npm initавтоматически добавляются зависимости на основе установленных пакетов и что нет необходимости запускать вторую команду.
paldepind

Я так рад, что вы можете зависеть от имен папок node_modules таким образом ... фу!
DT Rush

Это также фантастически полезно при использовании npm dedupe, которое вытягивает зависимости, которые совместно используются вашими модулями, из этих модулей и сохраняет их на верхнем уровне вашего node_modulesкаталога. Но это не трогает package.json! Благодаря этому вы можете зафиксировать и поделиться своими дедуплицированными настройками.
Патоген

1
Отличный ответ для любого, кто добавляет package.json после факта.
Кэрри Кендалл,

24

Командная строка :

npm init

создаст файл package.json

Для установки, обновления и удаления пакетов в соответствии с зависимостями в файл package.json:

Командная строка :

npm install <pkg>@* --save 

автоматически добавит последнюю версию пакета под зависимостями в файл package.json

EX:

npm install node-markdown@* --save

Командная строка :

npm install <pkg> --save

также автоматически добавит последнюю версию пакета в соответствии с зависимостями в файл package.json

если вам нужна конкретная версия для пакета, используйте эту командную строку :

npm install <pkg>@<version> --save

автоматически добавит конкретную версию пакета под зависимостями в файл package.json

EX:

npm install koa-views@1.0.0 --save

если вам нужен определенный диапазон версий для пакета, используйте эту Командную строку :

npm install <pkg>@<version range>

автоматически добавит последнюю версию для пакета между диапазонами версий под зависимостями в файл package.json

EX:

npm install koa-views@">1.0.0 <1.2.0" --save

Для получения более подробной информации о том , как написать версию для пакета НОГО Doc

Командная строка :

npm update --save

обновит пакеты в файле package.json и автоматически добавит обновленную версию для всех пакетов, находящихся под зависимостями, в файл package.json

Командная строка :

npm uninstall <pkg> --save

автоматически удалит пакет из зависимостей в файл package.json и удалит пакет из папки node_module


14

Запуск npm init -yделает ваше package.jsonвсе по умолчанию.
Затем вы можете изменить package.jsonсоответственно.
Это экономит время много раз, предотвращая нажатие enterна каждую команду вnpm init


6

Теперь вы можете использовать Yeoman - современный инструмент для веб-приложений на терминале узла, выполнив 3 простых шага.

Во-первых, вам нужно установить yo и другие необходимые инструменты:

$ npm install -g yo bower grunt-cli gulp

Чтобы создать веб-приложение, установите генератор generator-webapp generator:

$ npm install -g generator-webapp  // create scaffolding 

Беги йо и ... все готово

$ yo webapp  // create scaffolding 

Yeoman может написать стандартный код для всего вашего веб-приложения или контроллеров и моделей. Он может запустить веб-сервер предварительного просмотра для редактирования и компиляции; Мало того, что вы также можете запускать свои модульные тесты, минимизировать и объединять код, оптимизировать изображения и многое другое ...

Yeoman (yo) - инструмент для работы с лесами, который предлагает экосистему каркасных лесов, называемых генераторами, которые можно использовать для выполнения некоторых утомительных задач, упомянутых ранее.

Grunt / gulp - используется для сборки, предварительного просмотра и тестирования вашего проекта.

Bower - используется для управления зависимостями, поэтому вам больше не нужно вручную загружать свои библиотеки переднего плана.


5

Основываясь на ответе Pylinux, ниже приведено решение для ОС Windows,

dir node_modules > abc.txt
FOR /F %k in (abc.txt) DO npm install --save

Надеюсь, поможет.


Либо, вы можете просто набрать npm install вверху abc.txt и внизу - сохранить с удалением новой ссылки будет работать даже.
Рони

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

1

используйте команду npm init -f для создания файла package.json и после этого используйте --save после каждой команды, чтобы каждый модуль автоматически обновлялся внутри вашего package.json для ex: npm install express --save


0

1. Выбор

Если вы git и пользователь GitHub:

    generate-packageпроще, чем npm init.

еще

и / или вам не нравится package.jsonшаблон, который генерирует пакет илиnpm init генерирует:

    Вы можете создать свой собственный шаблон с помощью строительных лесов приложений , как генерировать , паруса или Yeoman .


2. Актуальность

Этот ответ актуален для марта 2018 года. В дальнейшем данные из этого ответа могут устареть.

Автор этого ответа лично использовал generate-package в марте 2018 года.


3. Ограничения

Вам нужно использовать git и GitHub для использования generate-package.


4. Демонстрация

Например, я создаю пустую папку sasha-npm-init-vs-generate-package .

4.1. генерировать-пакет

Команда:

D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>gen package
[16:58:52] starting generate
[16:59:01]  running tasks: [ 'package' ]
[16:59:04] starting package
? Project description? generate-package demo
? Author's name? Sasha Chernykh
? Author's URL? https://vk.com/hair_in_the_wind
[17:00:19] finished package  1m

package.json:

{
  "name": "sasha-npm-init-vs-generate-package",
  "description": "generate-package demo",
  "version": "0.1.0",
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package",
  "author": "Sasha Chernykh (https://vk.com/hair_in_the_wind)",
  "repository": "Kristinita/sasha-npm-init-vs-generate-package",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "license": "MIT",
  "engines": {
    "node": ">=4"
  },
  "scripts": {
    "test": "mocha"
  },
  "keywords": [
    "generate",
    "init",
    "npm",
    "package",
    "sasha",
    "vs"
  ]
}

4.2. npm init

D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package>npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.

See `npm help json` for definitive documentation on these fields
and exactly what they do.

Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.

Press ^C at any time to quit.
package name: (sasha-npm-init-vs-generate-package)
version: (1.0.0) 0.1.0
description: npm init demo
entry point: (index.js)
test command: mocha
git repository: https://github.com/Kristinita/sasha-npm-init-vs-generate-package
keywords: generate, package, npm, package, sasha, vs
author: Sasha Chernykh
license: (ISC) MIT
About to write to D:\SashaDemoRepositories\sasha-npm-init-vs-generate-package\package.json:

{
  "name": "sasha-npm-init-vs-generate-package",
  "version": "0.1.0",
  "description": "npm init demo",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
  },
  "keywords": [
    "generate",
    "package",
    "npm",
    "package",
    "sasha",
    "vs"
  ],
  "author": "Sasha Chernykh",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
}


Is this ok? (yes) y
{
  "name": "sasha-npm-init-vs-generate-package",
  "version": "0.1.0",
  "description": "npm init demo",
  "main": "index.js",
  "scripts": {
    "test": "mocha"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/Kristinita/sasha-npm-init-vs-generate-package.git"
  },
  "keywords": [
    "generate",
    "package",
    "npm",
    "package",
    "sasha",
    "vs"
  ],
  "author": "Sasha Chernykh",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package/issues"
  },
  "homepage": "https://github.com/Kristinita/sasha-npm-init-vs-generate-package#readme"
}

Я думаю, что generate-packageпроще, то npm init.


5. Настройка

Это создать свой собственный package.jsonшаблон, см генерировать и YEOMAN примеров.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.