Чи є спосіб автоматично створити файл package.json для проектів Node.js


412

Чи слід вручну редагувати package.json? Не могла така програма, як npm, просто переглядати файли, переглядати заяви «вимагати», а потім використовувати їх для введення необхідних записів у файл package.json? Чи є такі програми?


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

22
@neuromancer, чи можете ви прийняти правильну відповідь? Це явно той, який має 38 голосів ...
Естебан

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

1
@neromancer, відклади свої книги про Гібсона і виправи це! :)
prasanthv

1
npmjs.com/package/npm-collect робить саме це і багато іншого
coderofsalvation

Відповіді:


601

Файл 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
Пер npm init: Використовуйте npm install <pkg> --saveпотім, щоб встановити пакет і зберегти його як залежність у файлі package.json.
Бред Кох

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

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

3
npm init --force --yesє одним з лайнерів для створення цього файлу
Bernhard Döbler

204

По-перше, біжи

npm init

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

Потім, коли у вас є файл package.json, використовуйте

npm install <pkg> --save

або

npm install <pkg> --save-dev

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

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


6
здається, він не створює package.json зараз. win7x64 вузол0.10.9
atian25

33
Я не дуже ціную свою відповідь, за винятком рядка, переписаного та все ж приписуваного мені. Незалежно від того, застаріла вона чи ні.
nzondlo

Конкретна документація на npm init тут
shimim

1
Це має бути правильна відповідь. Не завжди потрібно торкатися вручну package.json, зазвичай це обробляється автоматично.
Саллар

1
--saveбільше не потрібно в нових версіях npm
David Callanan

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 рядків назад? У пакеті.json у мене лише 58, включаючи devDependitions: - /
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 простих кроків.

Спочатку вам потрібно буде встановити йо та інші необхідні інструменти:

$ npm install -g yo bower grunt-cli gulp

Щоб створити риштування веб-програми, встановіть генератор-webapp генератор:

$ 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, що може спричинити збій програми.
jarmod

1

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


0

1. Вибір

Якщо ви git та користувач GitHub:

    generate-packageпростіше, ніж npm init.

ще

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

    ви можете генерувати свій власний шаблон за допомогою програм для лісу як генерувати , вітрила або yeoman .


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

Ця відповідь актуальна для березня 2018 року. В майбутньому дані цієї відповіді можуть бути застарілими.

Автор цієї відповіді особисто використав Genex-пакет на березень 2018 року.


3. Обмеження

Вам потрібно використовувати git та GitHub для використання пакету generation.


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

Наприклад, я створюю порожню папку sasha-npm-init-vs-generate-package.

4.1. generator-пакет

Команда:

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шаблон, див . Приклади генерування та йоманів .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.