Ich bin neu in der Verwendung von npm und bower und baue meine erste App in emberjs :).
Ich habe ein wenig Erfahrung mit Schienen, daher bin ich mit der Idee von Dateien zum Auflisten von Abhängigkeiten vertraut (z. B. Bundler Gemfile).
Frage: Wenn ich ein Paket hinzufügen möchte (und die Abhängigkeit in git einchecke), wo gehört es hin - in package.json
oder in bower.json
?
Soweit ich weiß , wird durch
Ausführen bower install
das Paket abgerufen und in ein /vendor
Verzeichnis gestellt. Durch
Ausführen wird npm install
es abgerufen und in ein /node_modules
Verzeichnis gestellt.
Diese SO-Antwort besagt, dass Bower für das Front-End und npm für das Backend ist.
Das Ember-App-Kit scheint auf den ersten Blick an dieser Unterscheidung festzuhalten ... Aber Anweisungen in gruntfile zum Aktivieren einiger Funktionen geben zwei explizite Befehle, daher bin ich hier total verwirrt.
Intuitiv würde ich das erraten
npm install --save-dev Paketname entspricht dem Hinzufügen des Paketnamens zu meiner package.json
bower install --save package-name entspricht möglicherweise dem Hinzufügen des Pakets zu meiner bower.json und dem Ausführen von bower install ?
Wenn dies der Fall ist, wann sollte ich Pakete jemals explizit so installieren, ohne sie der Datei hinzuzufügen, die Abhängigkeiten verwaltet (abgesehen von der globalen Installation von Befehlszeilentools)?
quelle
Antworten:
Update für Mitte 2016 :
Die Dinge ändern sich so schnell, dass diese Antwort möglicherweise nicht mehr aktuell ist, wenn es Ende 2017 ist!
Anfänger können sich schnell in der Auswahl der Build-Tools und Workflows verlieren, aber was 2016 am aktuellsten ist, ist, Bower, Grunt oder Gulp überhaupt nicht zu verwenden! Mit Hilfe von Webpack können Sie alles direkt in NPM erledigen!
Google-Ergebnis "npm als Build-Tool": https://medium.com/@dabit3/introduction-to-using-npm-as-a-build-tool-b41076f488b0#.c33e74tsa
Webpack: https://webpack.github.io/docs/installation.html
Verstehen Sie mich nicht falsch, Leute verwenden andere Workflows und ich verwende immer noch GULP in meinem Legacy-Projekt (aber verlasse es langsam), aber so wird es in den besten Unternehmen und Entwicklern gemacht, die in diesem Workflow arbeiten und viel Geld verdienen!
Schauen Sie sich diese Vorlage an, es ist ein sehr aktuelles Setup, das aus einer Mischung der besten und neuesten Technologien besteht: https://github.com/coryhouse/react-slingshot
Deine Fragen:
Alles gehört jetzt in package.json
Die für die Erstellung erforderlichen Abhängigkeiten befinden sich in "devDependencies", dh
npm install require-dir --save-dev
(--save-dev aktualisiert Ihre package.json durch Hinzufügen eines Eintrags zu devDependencies)npm install lodash --save
(--save aktualisiert Ihre package.json, indem Sie Abhängigkeiten einen Eintrag hinzufügen.)Immer . Nur wegen des Komforts. Wenn Sie ein Flag (
--save-dev
oder--save
) hinzufügen, wird die Datei, die deps verwaltet (package.json), automatisch aktualisiert. Verschwenden Sie keine Zeit, indem Sie Abhängigkeiten manuell bearbeiten. Verknüpfung fürnpm install --save-dev package-name
isnpm i -D package-name
und Verknüpfung fürnpm install --save package-name
isnpm i -S package-name
quelle
With help of Webpack you can do everything directly in NPM!
Das stimmt nicht, man braucht nicht einmal ein Webpack in seinem WorkflowNpm und Bower sind beide Tools für das Abhängigkeitsmanagement. Aber der Hauptunterschied zwischen den beiden ist npm für die Installation von Knoten js Module verwendet wird , aber Bower js ist für die Verwaltung von Front - End - Komponenten wie HTML verwendet, css, js etc .
Eine Tatsache, die dies verwirrender macht, ist, dass npm einige Pakete bereitstellt, die auch in der Front-End-Entwicklung verwendet werden können, wie
grunt
undjshint
.Diese Zeilen fügen mehr Bedeutung hinzu
Edit : Grunt ist ganz anders als Npm und Bower. Grunt ist ein Javascript Task Runner Tool. Mit Grunzen können Sie viele Dinge tun, die Sie sonst manuell erledigen mussten. Hervorheben einiger Verwendungszwecke von Grunt:
Es gibt Grunz-Plugins zum Zusammenstellen von Sass, zum Hässlichen von Javascript, zum Kopieren von Dateien / Ordnern, zum Minimieren von Javascript usw.
Bitte beachten Sie, dass das Grunt-Plugin auch ein npm-Paket ist.
Frage 1
Es kommt wirklich darauf an, wo dieses Paket hingehört. Wenn es sich um ein Knotenmodul handelt (wie grunzen, anfordern), wird es in package.json verschoben, andernfalls in bower json.
Frage 2
Es spielt keine Rolle, ob Sie Pakete explizit installieren oder die Abhängigkeit in der JSON-Datei erwähnen. Angenommen, Sie arbeiten gerade an einem Knotenprojekt und benötigen beispielsweise ein anderes Projekt
request
. Dann haben Sie zwei Möglichkeiten:ODER
npm install --save request
--save
options fügt die Abhängigkeit auch der Datei package.json hinzu. Wenn Sie keine--save
Option angeben , wird nur das Paket heruntergeladen, die JSON-Datei bleibt jedoch unberührt.Sie können dies so oder so tun, es wird keinen wesentlichen Unterschied geben.
quelle
npm
Gegensatz zum v1-Tutorial, in dem sowohl npm als auch bower verwendet wurden, werden nur das neueste Quickstart-Tutorial für Winkel 2 (RC) und Git Seed verwendet . Ich mag die Fakten wirklich, dass (a)package.json
das einzige ist, was zu pflegen ist, (b) dass es Abhängigkeiten rekursiv in einem Einzeiler berechnetnpm install
und (c) wenn es ein Problem gibt, müssen Sie nur dennode_modules
Ordner löschen und npm install ausführen nochmal.