mirror of
https://github.com/nodejs/node-v0.x-archive.git
synced 2026-04-28 03:01:10 -04:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e6dea4601 | ||
|
|
c527366caa | ||
|
|
2a1f022d20 | ||
|
|
2dcaef6efa | ||
|
|
30cfe2780d | ||
|
|
55ddf54adf | ||
|
|
974ee7b3ec | ||
|
|
7d7bca6493 |
7
.gitignore
vendored
7
.gitignore
vendored
@@ -18,7 +18,6 @@ node_g
|
||||
# various stuff that VC++ produces/uses
|
||||
Debug/
|
||||
Release/
|
||||
!doc/blog/**
|
||||
*.sln
|
||||
!nodemsi.sln
|
||||
*.suo
|
||||
@@ -32,14 +31,12 @@ ipch/
|
||||
*.sdf
|
||||
*.opensdf
|
||||
|
||||
/config.mk
|
||||
/config.gypi
|
||||
/options.gypi
|
||||
*-nodegyp*
|
||||
/gyp-mac-tool
|
||||
/dist-osx
|
||||
/npm.wxs
|
||||
/tools/msvs/npm.wixobj
|
||||
email.md
|
||||
blog.html
|
||||
deps/v8-*
|
||||
./node_modules
|
||||
.svn/
|
||||
104
.mailmap
104
.mailmap
@@ -1,104 +0,0 @@
|
||||
Aaron Heckmann <aaron.heckmann@gmail.com> <aaron.heckmann+github@gmail.com>
|
||||
Abe Fettig <abefettig@gmail.com> <abe@fettig.net>
|
||||
Alex Kocharin <rlidwka@kocharin.ru>
|
||||
Alex Kocharin <rlidwka@kocharin.ru> <alex@kocharin.ru>
|
||||
Alexis Sellier <self@cloudhead.net>
|
||||
Alexis Sellier <self@cloudhead.net> <alexis@cloudhead.io>
|
||||
Arlo Breault <arlolra@gmail.com>
|
||||
Artem Zaytsev <a.arepo@gmail.com>
|
||||
Atsuo Fukaya <fukayatsu@gmail.com>
|
||||
Ben Noordhuis <info@bnoordhuis.nl> <bnoordhuis@bender.(none)>
|
||||
Bert Belder <bertbelder@gmail.com> <bert@piscisaureus2.(none)>
|
||||
Bert Belder <bertbelder@gmail.com> <piscisaureus@Berts-MacBook-Pro.local>
|
||||
Brandon Benvie <brandon@bbenvie.com> <brandon@brandonbenvie.com>
|
||||
Brian White <mscdex@mscdex.net>
|
||||
Brian White <mscdex@mscdex.net> <mscdex@gmail.com>
|
||||
Chew Choon Keat <choonkeat@gmail.com>
|
||||
Christopher Lenz <cmlenz@gmail.com> <chris@lamech.local>
|
||||
Daniel Berger <code+node@dpbis.net>
|
||||
Daniel Chcouri <333222@gmail.com>
|
||||
Daniel Gröber <darklord@darkboxed.org>
|
||||
Daniel Gröber <darklord@darkboxed.org> <dxld@darkboxed.org>
|
||||
Daniel Pihlström <sciolist.se@gmail.com>
|
||||
David Siegel <david@artcom.de> <david.siegel@artcom.de>
|
||||
Domenic Denicola <domenic@domenicdenicola.com>
|
||||
Eduard Burtescu <eddy_me08@yahoo.com>
|
||||
Einar Otto Stangvik <einaros@gmail.com>
|
||||
Elliott Cable <me@ell.io>
|
||||
EungJun Yi <semtlenori@gmail.com>
|
||||
Evan Larkin <evan.larkin.il.com> <evan.larkin.iit@gmail.com>
|
||||
Farid Neshat <FaridN_SOAD@yahoo.com>
|
||||
Felix Geisendörfer <felix@debuggable.com>
|
||||
Felix Geisendörfer <felix@debuggable.com>
|
||||
Friedemann Altrock <frodenius@gmail.com>
|
||||
Fuji Goro <gfuji@cpan.org>
|
||||
Gabriel de Perthuis <g2p.code@gmail.com>
|
||||
Herbert Vojčík <herby@mailbox.sk>
|
||||
Igor Zinkovsky <igorzi@microsoft.com>
|
||||
Isaac Z. Schlueter <i@izs.me>
|
||||
Isaac Z. Schlueter <i@izs.me> <i@foohack.com>
|
||||
Jérémy Lal <kapouer@melix.org>
|
||||
Jérémy Lal <kapouer@melix.org> <holisme@gmail.com>
|
||||
Jered Schmidt <tr@nslator.jp>
|
||||
Joe Shaw <joe@joeshaw.org> <joeshaw@litl.com>
|
||||
Johan Bergström <bugs@bergstroem.nu>
|
||||
Johan Dahlberg <jfd@distrop.com> <dahlberg.johan@gmail.com>
|
||||
Jonas Pfenniger <jonas@pfenniger.name> <jonas@stvs.ch>
|
||||
Jonathan Rentzsch <jwr.git@redshed.net>
|
||||
Joshua S. Weinstein <josher19@users.sf.net>
|
||||
Koichi Kobayashi <koichik@improvement.jp>
|
||||
Kris Kowal <kris.kowal@cixar.com>
|
||||
Kyle Robinson Young <kyle@dontkry.com>
|
||||
Mathias Pettersson <mape@mape.me>
|
||||
Michael Bernstein <michaelrbernstein@gmail.com>
|
||||
Michael Wilber <gcr@sneakygcr.net>
|
||||
Micheil Smith <micheil@brandedcode.com> <micheil@yettobebranded.net>
|
||||
Mikael Bourges-Sevenier <mikeseven@gmail.com> <msevenier@motorola.com>
|
||||
Nebu Pookins<nebu@nebupookins.net>
|
||||
Nicholas Kinsey <pyrotechnick@feistystudios.com>
|
||||
Onne Gorter <onne@onnlucky.com>
|
||||
Paul Querna <pquerna@apache.org> <paul@querna.org>
|
||||
Ray Morgan <rmorgan@zappos.com>
|
||||
Ray Solomon <raybsolomon@gmail.com>
|
||||
Rick Olson <technoweenie@gmail.com>
|
||||
Ryan Dahl <ry@tinyclouds.org>
|
||||
Ryan Emery <seebees@gmail.com>
|
||||
Sam Shull <brickysam26@gmail.com> <brickysam26@samuel-shulls-computer.local>
|
||||
Sam Shull <brickysam26@gmail.com> <sshull@squaremouth.com>
|
||||
Sambasiva Suda <sambasivarao@gmail.com>
|
||||
San-Tai Hsu <v@fatpipi.com>
|
||||
Sergey Kryzhanovsky <skryzhanovsky@gmail.com> <another@dhcp199-223-red.yandex.net>
|
||||
Shannen Saez <shannenlaptop@gmail.com>
|
||||
Shigeki Ohtsu <ohtsu@d.jp> <ohtsu@iij.ad.jp>
|
||||
Siddharth Mahendraker <siddharth_mahen@hotmail.com> <siddharth_mahen@me.com>
|
||||
Simon Willison <simon@simonwillison.net>
|
||||
Stanislav Opichal <opichals@gmail.com>
|
||||
Stefan Bühler <stbuehler@web.de>
|
||||
Tadashi SAWADA <cesare@mayverse.jp>
|
||||
Takahiro ANDO <takahiro.ando@gmail.com>
|
||||
Ted Young <ted@radicaldesigns.org>
|
||||
Thomas Lee <thomas.lee@shinetech.com> <tom@tom-debian.sensis.com.au>
|
||||
Tim Caswell <tim@creationix.com> <tim@0-26-8-e9-4c-e1.dyn.utdallas.edu>
|
||||
Tim Smart <timehandgod@gmail.com> <tim@fostle.com>
|
||||
Tim Smart <timehandgod@gmail.com> <timehandgod@gmail.com>
|
||||
TJ Holowaychuk <tj@vision-media.ca>
|
||||
TJ Holowaychuk <tj@vision-media.ca> <tjholowayhuk@gmail.com>
|
||||
Trevor Burnham <trevor@databraid.com> <trevorburnham@gmail.com>
|
||||
Tyler Larson <talltyler@gmail.com>
|
||||
Vincent Voyer <v@fasterize.com>
|
||||
Yoshihiro KIKUCHI <yknetg@gmail.com>
|
||||
Yuichiro MASUI <masui@masuidrive.jp>
|
||||
Zachary Scott <zachary@zacharyscott.net> <zachary.s.scott@gmail.com>
|
||||
Zoran Tomicic <ztomicic@gmail.com>
|
||||
|
||||
# These people didn't contribute patches to node directly,
|
||||
# but we've landed their v8 patches in the node repository:
|
||||
Daniel Clifford <danno@chromium.org>
|
||||
Erik Corry <erik.corry@gmail.com>
|
||||
Jakob Kummerow <jkummerow@chromium.org>
|
||||
Kevin Millikin <kmillikin@chromium.org>
|
||||
Lasse R.H. Nielsen <lrn@chromium.org>
|
||||
Michael Starzinger <mstarzinger@chromium.org>
|
||||
Toon Verwaest <verwaest@chromium.org>
|
||||
Vyacheslav Egorov <vegorov@chromium.org>
|
||||
Yang Guo <yangguo@chromium.org>
|
||||
164
AUTHORS
164
AUTHORS
@@ -59,7 +59,7 @@ Arlo Breault <arlolra@gmail.com>
|
||||
Kris Kowal <kris.kowal@cixar.com>
|
||||
Jacek Becela <jacek.becela@gmail.com>
|
||||
Rob Ellis <kazoomer@gmail.com>
|
||||
Tim Smart <timehandgod@gmail.com>
|
||||
Tim Smart <timehAndGod@gmail.com>
|
||||
Herbert Vojčík <herby@mailbox.sk>
|
||||
Krishna Rajendran <krishna@emptybox.org>
|
||||
Nicholas Kinsey <pyrotechnick@feistystudios.com>
|
||||
@@ -98,7 +98,8 @@ Jerome Etienne <jerome.etienne@gmail.com>
|
||||
Dmitriy Shalashov <skaurus@gmail.com>
|
||||
Adam Wiggins <adam@heroku.com>
|
||||
Rick Olson <technoweenie@gmail.com>
|
||||
Sergey Kryzhanovsky <skryzhanovsky@gmail.com>
|
||||
David Siegel <david.siegel@artcom.de>
|
||||
Sergey Kzyzhanovsky <skryzhanovsky@gmail.com>
|
||||
Marco Rogers <marco.rogers@gmail.com>
|
||||
Benjamin Fritsch <beanie@benle.de>
|
||||
Jan Kassens <jan@kassens.net>
|
||||
@@ -143,13 +144,13 @@ Daniel Gröber <darklord@darkboxed.org>
|
||||
Travis Swicegood <development@domain51.com>
|
||||
Oleg Slobodskoi <oleg008@gmail.com>
|
||||
Jeremy Martin <jmar777@gmail.com>
|
||||
Michael Wilber <gcr@sneakygcr.net>
|
||||
Michael W <gcr@sneakygcr.net>
|
||||
Sean Braithwaite <brapse@gmail.com>
|
||||
Anders Conbere <aconbere@gmail.com>
|
||||
Devin Torres <devin@devintorres.com>
|
||||
Theo Schlossnagle <jesus@omniti.com>
|
||||
Kai Chen <kaichenxyz@gmail.com>
|
||||
Daniel Chcouri <333222@gmail.com>
|
||||
Daniel C <333222@gmail.com>
|
||||
Mihai Călin Bazon <mihai@bazon.net>
|
||||
Ali Farhadi <a.farhadi@gmail.com>
|
||||
Daniel Ennis <aikar@aikar.co>
|
||||
@@ -158,69 +159,59 @@ Greg Hughes <greg@ghughes.com>
|
||||
David Trejo <david.daniel.trejo@gmail.com>
|
||||
Joe Walnes <joe@walnes.com>
|
||||
Koichi Kobayashi <koichik@improvement.jp>
|
||||
Daniel Gröber <dxld@darkboxed.org>
|
||||
Konstantin Käfer <github@kkaefer.com>
|
||||
Richard Rodger <richard@ricebridge.com>
|
||||
Andreas Reich <andreas@reich.name>
|
||||
Tony Huang <cnwzhjs@gmail.com>
|
||||
Dean McNamee <dean@gmail.com>
|
||||
Trevor Burnham <trevor@databraid.com>
|
||||
Zachary Scott <zachary@zacharyscott.net>
|
||||
Arnout Kazemier <info@3rd-Eden.com>
|
||||
George Stagas <gstagas@gmail.com>
|
||||
Ben Weaver <ben@orangesoda.net>
|
||||
Scott McWhirter <scott.mcwhirter@joyent.com>
|
||||
Jakub Lekstan <jakub.lekstan@dreamlab.pl>
|
||||
Nick Campbell <nicholas.j.campbell@gmail.com>
|
||||
Nebu Pookins <nebu@nebupookins.net>
|
||||
Tim Baumann <tim@timbaumann.info>
|
||||
Robert Mustacchi <rm@joyent.com>
|
||||
George Miroshnykov <george.miroshnykov@gmail.com>
|
||||
Mark Cavage <mark.cavage@joyent.com>
|
||||
Håvard Stranden <havard.stranden@gmail.com>
|
||||
George Miroshnykov <george.miroshnykov@gmail.com>
|
||||
Marcel Laverdet <marcel@laverdet.com>
|
||||
Alexandre Marangone <a.marangone@gmail.com>
|
||||
Mark Cavage <mark.cavage@joyent.com>
|
||||
Ryan Petrello <lists@ryanpetrello.com>
|
||||
Fuji Goro <gfuji@cpan.org>
|
||||
Siddharth Mahendraker <siddharth_mahen@hotmail.com>
|
||||
Dave Pacheco <dap@joyent.com>
|
||||
Mathias Buus <m@ge.tt>
|
||||
Henry Rawas <henryr@schakra.com>
|
||||
Yoshihiro KIKUCHI <yknetg@gmail.com>
|
||||
Brett Kiefer <kiefer@gmail.com>
|
||||
Mariano Iglesias <mariano@cricava.com>
|
||||
Jörn Horstmann <git@jhorstmann.net>
|
||||
Joe Shaw <joe@joeshaw.org>
|
||||
Niklas Fiekas <niklas.fiekas@googlemail.com>
|
||||
Adam Luikart <me@adamluikart.com>
|
||||
Artem Zaytsev <a.arepo@gmail.com>
|
||||
Joe Shaw <joeshaw@litl.com>
|
||||
Alex Xu <alex_y_xu@yahoo.ca>
|
||||
Jeremy Selier <jeremy@jolicloud.com>
|
||||
Igor Zinkovsky <igorzi@microsoft.com>
|
||||
Kip Gebhardt <kip.gebhardt@voxer.com>
|
||||
Stefan Rusu <saltwaterc@gmail.com>
|
||||
Shigeki Ohtsu <ohtsu@d.jp>
|
||||
Wojciech Wnętrzak <w.wnetrzak@gmail.com>
|
||||
Devon Govett <devongovett@gmail.com>
|
||||
Steve Engledow <steve.engledow@proxama.com>
|
||||
Pierre-Alexandre St-Jean <pierrealexandre.stjean@gmail.com>
|
||||
Reid Burke <me@reidburke.com>
|
||||
Niklas Fiekas <niklas.fiekas@googlemail.com>
|
||||
Adam Luikart <me@adamluikart.com>
|
||||
avz <a.arepo@gmail.com>
|
||||
Jeremy Selier <jeremy@jolicloud.com>
|
||||
Igor Zinkovsky <igorzi@microsoft.com>
|
||||
Shigeki Ohtsu <ohtsu@d.jp>
|
||||
vegorov@chromium.org <vegorov@chromium.org>
|
||||
Pierre-Alexandre St-Jean <pierrealexandre.stjean@gmail.com>
|
||||
Vicente Jimenez Aguilar <googuy@gmail.com>
|
||||
Tadashi SAWADA <cesare@mayverse.jp>
|
||||
Jeroen Janssen <jeroen.janssen@gmail.com>
|
||||
Daniel Pihlström <sciolist.se@gmail.com>
|
||||
Stefan Bühler <stbuehler@web.de>
|
||||
Alexander Uvarov <alexander.uvarov@gmail.com>
|
||||
Aku Kotkavuo <aku@hibana.net>
|
||||
Peter Bright <drpizza@quiscalusmexicanus.org>
|
||||
SAWADA Tadashi <cesare@mayverse.jp>
|
||||
Logan Smyth <loganfsmyth@gmail.com>
|
||||
Christopher Wright <christopherwright@gmail.com>
|
||||
Mickaël Delahaye <mickael.delahaye@gmail.com>
|
||||
Aku Kotkavuo <aku@hibana.net>
|
||||
Peter Bright <drpizza@quiscalusmexicanus.org>
|
||||
Glen Low <glen.low@pixelglow.com>
|
||||
Thomas Shinnick <tshinnic@gmail.com>
|
||||
Mickaël Delahaye <mickael.delahaye@gmail.com>
|
||||
Antranig Basman <antranig.basman@colorado.edu>
|
||||
Maciej Małecki <maciej.malecki@notimplemented.org>
|
||||
Evan Martin <martine@danga.com>
|
||||
Peter Lyons <pete@peterlyons.com>
|
||||
jkummerow@chromium.org <jkummerow@chromium.org>
|
||||
Jann Horn <jannhorn@googlemail.com>
|
||||
Abimanyu Raja <abimanyuraja@gmail.com>
|
||||
Karl Skomski <karl@skomski.com>
|
||||
@@ -228,9 +219,7 @@ Niclas Hoyer <niclas@verbugt.de>
|
||||
Michael Jackson <mjijackson@gmail.com>
|
||||
Ashok Mudukutore <ashok@lineratesystems.com>
|
||||
Sean Cunningham <sean.cunningham@mandiant.com>
|
||||
Vitor Balocco <vitorbal@gmail.com>
|
||||
Ben Leslie <benno@benno.id.au>
|
||||
Eric Lovett <etlovett@gmail.com>
|
||||
Christian Tellnes <christian@tellnes.no>
|
||||
Colton Baker <github@netrefuge.net>
|
||||
Tyler Larson <talltyler@gmail.com>
|
||||
@@ -240,6 +229,7 @@ Simen Brekken <simen.brekken@gmail.com>
|
||||
Guglielmo Ferri <44gatti@gmail.com>
|
||||
Thomas Parslow <tom@almostobsolete.net>
|
||||
Ryan Emery <seebees@gmail.com>
|
||||
Zachary Scott <zachary@zacharyscott.net>
|
||||
Jordan Sissel <jls@semicomplete.com>
|
||||
Matt Robenolt <matt@ydekproductions.com>
|
||||
Jacob H.C. Kragh <jhckragh@gmail.com>
|
||||
@@ -250,18 +240,13 @@ Mathias Bynens <mathias@qiwi.be>
|
||||
Łukasz Walukiewicz <lukasz@walukiewicz.eu>
|
||||
Artur Adib <arturadib@gmail.com>
|
||||
E. Azer Koçulu <azer@kodfabrik.com>
|
||||
Paddy Byers <paddy.byers@gmail.com>
|
||||
Roman Shtylman <shtylman@gmail.com>
|
||||
Kyle Robinson Young <kyle@dontkry.com>
|
||||
Tim Oxley <secoif@gmail.com>
|
||||
Eduard Burtescu <eddy_me08@yahoo.com>
|
||||
Ingmar Runge <ingmar@irsoft.de>
|
||||
Russ Bradberry <rbradberry@gmail.com>
|
||||
Andreas Madsen <amwebdk@gmail.com>
|
||||
Adam Malcontenti-Wilson <adman.com@gmail.com>
|
||||
Avi Flax <avi@aviflax.com>
|
||||
Pedro Teixeira <pedro.teixeira@gmail.com>
|
||||
Johan Bergström <bugs@bergstroem.nu>
|
||||
James Hartig <james.hartig@grooveshark.com>
|
||||
Shannen Saez <shannenlaptop@gmail.com>
|
||||
Seong-Rak Choi <ragiragi@hanmail.net>
|
||||
@@ -269,8 +254,6 @@ Dave Irvine <davman99@gmail.com>
|
||||
Ju-yeong Park <interruptz@gmail.com>
|
||||
Phil Sung <psung@dnanexus.com>
|
||||
Damon Oehlman <damon.oehlman@sidelab.com>
|
||||
Mikael Bourges-Sevenier <mikeseven@gmail.com>
|
||||
Emerson Macedo <emerleite@gmail.com>
|
||||
Ryunosuke SATO <tricknotes.rs@gmail.com>
|
||||
Michael Bernstein <michaelrbernstein@gmail.com>
|
||||
Guillermo Rauch <rauchg@gmail.com>
|
||||
@@ -279,110 +262,19 @@ Brandon Benvie <brandon@bbenvie.com>
|
||||
Nicolas LaCasse <nlacasse@borderstylo.com>
|
||||
Dan VerWeire <dverweire@gmail.com>
|
||||
Matthew Fitzsimmons <matt@joyent.com>
|
||||
Paddy Byers <paddy.byers@gmail.com>
|
||||
Philip Tellis <philip.tellis@gmail.com>
|
||||
Christopher Jeffrey <chjjeffrey@gmail.com>
|
||||
Seth Fitzsimmons <seth@mojodna.net>
|
||||
Einar Otto Stangvik <einaros@gmail.com>
|
||||
Paul Vorbach <paul@vorb.de>
|
||||
Luke Gallagher <notfornoone@gmail.com>
|
||||
Tomasz Buchert <tomek.buchert@gmail.com>
|
||||
Myles Byrne <myles@myles.id.au>
|
||||
T.C. Hollingsworth <tchollingsworth@gmail.com>
|
||||
Cam Pedersen <diffference@gmail.com>
|
||||
Roly Fentanes <roly426@gmail.com>
|
||||
Ted Young <ted@radicaldesigns.org>
|
||||
tedsuo <ted@radicaldesigns.org>
|
||||
Joshua Holbrook <josh.holbrook@gmail.com>
|
||||
Blake Miner <miner.blake@gmail.com>
|
||||
Vincent Ollivier <contact@vincentollivier.com>
|
||||
Jimb Esser <jimb@railgun3d.com>
|
||||
Sambasiva Suda <sambasivarao@gmail.com>
|
||||
Sadique Ali <sadiqalikm@gmail.com>
|
||||
Dmitry Nizovtsev <dmitry@ukrteam.com>
|
||||
Alex Kocharin <rlidwka@kocharin.ru>
|
||||
Ming Liu <vmliu1@gmail.com>
|
||||
Shea Levy <shea@shealevy.com>
|
||||
Nao Iizuka <iizuka@kyu-mu.net>
|
||||
Christian Ress <christian@ressonline.de>
|
||||
Rod Vagg <rod@vagg.org>
|
||||
Matt Ezell <ezell.matt@gmail.com>
|
||||
Charlie McConnell <charlie@charlieistheman.com>
|
||||
Farid Neshat <FaridN_SOAD@yahoo.com>
|
||||
Johannes Wüller <johanneswueller@gmail.com>
|
||||
Erik Lundin <mjor.himself@gmail.com>
|
||||
Bryan Cantrill <bryan@joyent.com>
|
||||
Yosef Dinerstein <yosefd@microsoft.com>
|
||||
Nathan Friedly <nathan@nfriedly.com>
|
||||
Aaron Jacobs <jacobsa@google.com>
|
||||
Mustansir Golawala <mgolawala@gmail.com>
|
||||
Atsuo Fukaya <fukayatsu@gmail.com>
|
||||
Domenic Denicola <domenic@domenicdenicola.com>
|
||||
Joshua S. Weinstein <josher19@users.sf.net>
|
||||
lrn@chromium.org <lrn@chromium.org>
|
||||
Dane Springmeyer <dane@dbsgeo.com>
|
||||
Erik Dubbelboer <erik@dubbelboer.com>
|
||||
Malte-Thorben Bruns <skenqbx@googlemail.com>
|
||||
Michael Thomas <aelmalinka@gmail.com>
|
||||
Garen Torikian <gjtorikian@gmail.com>
|
||||
EungJun Yi <semtlenori@gmail.com>
|
||||
Sambasiva Suda <sambasivarao@gmail.com>
|
||||
Vincent Voyer <v@fasterize.com>
|
||||
Takahiro ANDO <takahiro.ando@gmail.com>
|
||||
ANDO Takahiro <takahiro.ando@gmail.com>
|
||||
Erwin van der Koogh <github@koogh.com>
|
||||
Brian Schroeder <bts@gmail.com>
|
||||
J. Lee Coltrane <lee@projectmastermind.com>
|
||||
Javier Hernández <jhernandez@emergya.com>
|
||||
James Koval <james.ross.koval@gmail.com>
|
||||
Kevin Gadd <kevin.gadd@gmail.com>
|
||||
Ray Solomon <raybsolomon@gmail.com>
|
||||
Kevin Bowman <github@magicmonkey.org>
|
||||
Matt Gollob <mattgollob@gmail.com>
|
||||
Simon Sturmer <sstur@me.com>
|
||||
Joel Brandt <joelrbrandt@gmail.com>
|
||||
Marc Harter <wavded@gmail.com>
|
||||
Nuno Job <nunojobpinto@gmail.com>
|
||||
Ben Kelly <ben@wanderview.com>
|
||||
Felix Böhm <felixboehm55@googlemail.com>
|
||||
Gabriel de Perthuis <g2p.code@gmail.com>
|
||||
Tim Macfarlane <timmacfarlane@gmail.com>
|
||||
Jonas Westerlund <jonas.westerlund@me.com>
|
||||
Dominic Tarr <dominic.tarr@gmail.com>
|
||||
Justin Plock <jplock@gmail.com>
|
||||
Toshihiro Nakamura <toshihiro.nakamura@gmail.com>
|
||||
Ivan Torres <mexpolk@gmail.com>
|
||||
Philipp Hagemeister <phihag@phihag.de>
|
||||
George Shank <shankga@gmail.com>
|
||||
Mike Morearty <mike@morearty.com>
|
||||
Peter Rybin <peter.rybin@gmail.com>
|
||||
Eugen Dueck <eugen@dueck.org>
|
||||
Gil Pedersen <git@gpost.dk>
|
||||
Tyler Neylon <tylerneylon@gmail.com>
|
||||
Golo Roden <webmaster@goloroden.de>
|
||||
Ron Korving <rkorving@wizcorp.jp>
|
||||
Brandon Wilson <chlavois@gmail.com>
|
||||
Bearice Ren <bearice@gmail.com>
|
||||
Ankur Oberoi <aoberoi@gmail.com>
|
||||
Atsuya Takagi <atsuya.takagi@gmail.com>
|
||||
Pooya Karimian <pkarimian@sencha.com>
|
||||
Frédéric Germain <frederic.germain@gmail.com>
|
||||
Robin Lee <cheeselee@fedoraproject.org>
|
||||
Adam Blackburn <regality@gmail.com>
|
||||
Willi Eggeling <email@wje-online.de>
|
||||
Andrew Paprocki <andrew@ishiboo.com>
|
||||
Max Ogden <max@maxogden.com>
|
||||
Olivier Lalonde <olalonde@gmail.com>
|
||||
Francois Marier <francois@mozilla.com>
|
||||
Trevor Norris <trev.norris@gmail.com>
|
||||
Joshua Erickson <josh@snoj.us>
|
||||
Kai Sasaki Lewuathe <sasaki_kai@lewuathe.sakura.ne.jp>
|
||||
Nicolas Chambrier <naholyr@gmail.com>
|
||||
Tim Bradshaw <tfb@cley.com>
|
||||
Johannes Ewald <mail@johannesewald.de>
|
||||
Chris Dent <chris.dent@gmail.com>
|
||||
Dan Milon <danmilon@gmail.com>
|
||||
Jacob Gable <jacob.gable@gmail.com>
|
||||
Rick Yakubowski <richard@orpha-systems.com>
|
||||
Dan Kohn <dan@dankohn.com>
|
||||
Timothy J Fontaine <tjfontaine@gmail.com>
|
||||
Eugene Girshov <eugene.girshov@nixu.com>
|
||||
Raymond Feng <enjoyjava@gmail.com>
|
||||
Tobias Müllerleile <tobias@muellerleile.net>
|
||||
Daniel Chatfield <chatfielddaniel@gmail.com>
|
||||
cjihrig <cjihrig@gmail.com>
|
||||
|
||||
145
CONTRIBUTING.md
145
CONTRIBUTING.md
@@ -1,145 +0,0 @@
|
||||
# CONTRIBUTING
|
||||
|
||||
The node.js project welcomes new contributors. This document will guide you
|
||||
through the process.
|
||||
|
||||
|
||||
### FORK
|
||||
|
||||
Fork the project [on GitHub](https://github.com/joyent/node) and check out
|
||||
your copy.
|
||||
|
||||
```
|
||||
$ git clone git@github.com:username/node.git
|
||||
$ cd node
|
||||
$ git remote add upstream git://github.com/joyent/node.git
|
||||
```
|
||||
|
||||
Now decide if you want your feature or bug fix to go into the master branch
|
||||
or the stable branch. As a rule of thumb, bug fixes go into the stable branch
|
||||
while new features go into the master branch.
|
||||
|
||||
The stable branch is effectively frozen; patches that change the node.js
|
||||
API/ABI or affect the run-time behavior of applications get rejected.
|
||||
|
||||
The rules for the master branch are less strict; consult the
|
||||
[stability index page][] for details.
|
||||
|
||||
In a nutshell, modules are at varying levels of API stability. Bug fixes are
|
||||
always welcome but API or behavioral changes to modules at stability level 3
|
||||
and up are off-limits.
|
||||
|
||||
Node.js has several bundled dependencies in the deps/ and the tools/
|
||||
directories that are not part of the project proper. Any changes to files
|
||||
in those directories or its subdirectories should be sent to their respective
|
||||
projects. Do not send your patch to us, we cannot accept it.
|
||||
|
||||
In case of doubt, open an issue in the [issue tracker][], post your question
|
||||
to the [node.js mailing list][] or contact one of the [project maintainers][]
|
||||
on [IRC][].
|
||||
|
||||
Especially do so if you plan to work on something big. Nothing is more
|
||||
frustrating than seeing your hard work go to waste because your vision
|
||||
does not align with that of a project maintainer.
|
||||
|
||||
|
||||
### BRANCH
|
||||
|
||||
Okay, so you have decided on the proper branch. Create a feature branch
|
||||
and start hacking:
|
||||
|
||||
```
|
||||
$ git checkout -b my-feature-branch -t origin/v0.8
|
||||
```
|
||||
|
||||
(Where v0.8 is the latest stable branch as of this writing.)
|
||||
|
||||
|
||||
### COMMIT
|
||||
|
||||
Make sure git knows your name and email address:
|
||||
|
||||
```
|
||||
$ git config --global user.name "J. Random User"
|
||||
$ git config --global user.email "j.random.user@example.com"
|
||||
```
|
||||
|
||||
Writing good commit logs is important. A commit log should describe what
|
||||
changed and why. Follow these guidelines when writing one:
|
||||
|
||||
1. The first line should be 50 characters or less and contain a short
|
||||
description of the change.
|
||||
2. Keep the second line blank.
|
||||
3. Wrap all other lines at 72 columns.
|
||||
|
||||
A good commit log looks like this:
|
||||
|
||||
```
|
||||
Header line: explaining the commit in one line
|
||||
|
||||
Body of commit message is a few lines of text, explaining things
|
||||
in more detail, possibly giving some background about the issue
|
||||
being fixed, etc etc.
|
||||
|
||||
The body of the commit message can be several paragraphs, and
|
||||
please do proper word-wrap and keep columns shorter than about
|
||||
72 characters or so. That way `git log` will show things
|
||||
nicely even when it is indented.
|
||||
```
|
||||
|
||||
The header line should be meaningful; it is what other people see when they
|
||||
run `git shortlog` or `git log --oneline`.
|
||||
|
||||
Have a look at `git log` for inspiration.
|
||||
|
||||
|
||||
### REBASE
|
||||
|
||||
Use `git rebase` (not `git merge`) to sync your work from time to time.
|
||||
|
||||
```
|
||||
$ git fetch upstream
|
||||
$ git rebase upstream/v0.8 # or upstream/master
|
||||
```
|
||||
|
||||
|
||||
### TEST
|
||||
|
||||
Bug fixes and features should come with tests. Add your tests in the
|
||||
test/simple/ directory. Look at other tests to see how they should be
|
||||
structured (license boilerplate, common includes, etc.).
|
||||
|
||||
```
|
||||
$ make jslint test
|
||||
```
|
||||
|
||||
Make sure the linter is happy and that all tests pass. Please, do not submit
|
||||
patches that fail either check.
|
||||
|
||||
|
||||
### PUSH
|
||||
|
||||
```
|
||||
$ git push origin my-feature-branch
|
||||
```
|
||||
|
||||
Go to https://github.com/username/node and select your feature branch. Click
|
||||
the 'Pull Request' button and fill out the form.
|
||||
|
||||
Pull requests are usually reviewed within a few days. If there are comments
|
||||
to address, apply your changes in a separate commit and push that to your
|
||||
feature branch. Post a comment in the pull request afterwards; GitHub does
|
||||
not send out notifications when you add commits.
|
||||
|
||||
|
||||
### CONTRIBUTOR LICENSE AGREEMENT
|
||||
|
||||
Please visit http://nodejs.org/cla.html and sign the Contributor License
|
||||
Agreement. You only need to do that once.
|
||||
|
||||
|
||||
[stability index page]: https://github.com/joyent/node/blob/master/doc/api/documentation.markdown
|
||||
[issue tracker]: https://github.com/joyent/node/issues
|
||||
[node.js mailing list]: http://groups.google.com/group/nodejs
|
||||
[IRC]: http://webchat.freenode.net/?channels=node.js
|
||||
[project maintainers]: https://github.com/joyent/node/wiki/Project-Organization
|
||||
73
LICENSE
73
LICENSE
@@ -196,7 +196,7 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
"""
|
||||
|
||||
- C-Ares, an asynchronous DNS client, located at deps/uv/src/ares. C-Ares license
|
||||
follows:
|
||||
follows
|
||||
"""
|
||||
/* Copyright 1998 by the Massachusetts Institute of Technology.
|
||||
*
|
||||
@@ -215,7 +215,7 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
|
||||
- OpenSSL located at deps/openssl. OpenSSL is cryptographic software written
|
||||
by Eric Young (eay@cryptsoft.com) to provide SSL/TLS encryption. OpenSSL's
|
||||
license follows:
|
||||
license follows
|
||||
"""
|
||||
/* ====================================================================
|
||||
* Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved.
|
||||
@@ -225,7 +225,7 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
@@ -296,11 +296,11 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
||||
IN THE SOFTWARE.
|
||||
IN THE SOFTWARE.
|
||||
"""
|
||||
|
||||
- Closure Linter is located at tools/closure_linter. Closure's license
|
||||
follows:
|
||||
follows
|
||||
"""
|
||||
# Copyright (c) 2007, Google Inc.
|
||||
# All rights reserved.
|
||||
@@ -403,7 +403,7 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
* Available under MIT license <http://mths.be/mit>
|
||||
"""
|
||||
|
||||
- tools/gyp. GYP is a meta-build system. GYP's license follows:
|
||||
- tools/gyp GYP is a meta-build system. GYP's license follows:
|
||||
"""
|
||||
Copyright (c) 2009 Google Inc. All rights reserved.
|
||||
|
||||
@@ -434,7 +434,7 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
"""
|
||||
|
||||
- Zlib at deps/zlib. zlib's license follows:
|
||||
- Zlib at deps/zlib. zlib's license follows
|
||||
"""
|
||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
||||
version 1.2.4, March 14th, 2010
|
||||
@@ -463,8 +463,8 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
*/
|
||||
"""
|
||||
|
||||
- npm is a package manager program located at deps/npm.
|
||||
npm's license follows:
|
||||
- npm is a package manager program located at deps/npm.
|
||||
npm's license follows:
|
||||
"""
|
||||
Copyright 2009-2012, Isaac Z. Schlueter (the "Original Author")
|
||||
All rights reserved.
|
||||
@@ -517,11 +517,6 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
"npm Logo" created by Mathias Pettersson and Brian Hammond,
|
||||
used with permission.
|
||||
|
||||
"Gubblebum Blocky" font
|
||||
Copyright (c) 2007 by Tjarda Koster, http://jelloween.deviantart.com
|
||||
included for use in the npm website and documentation,
|
||||
used with permission.
|
||||
|
||||
This program uses "node-uuid", Copyright (c) 2010 Robert Kieffer,
|
||||
according to the terms of the MIT license.
|
||||
|
||||
@@ -532,8 +527,8 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
according to the terms of the MIT/X11 license.
|
||||
"""
|
||||
|
||||
- tools/doc/node_modules/marked. Marked is a Markdown parser. Marked's
|
||||
license follows:
|
||||
- tools/doc/node_modules/marked Marked is a Markdown parser. Marked's
|
||||
license follows
|
||||
"""
|
||||
Copyright (c) 2011-2012, Christopher Jeffrey (https://github.com/chjj/)
|
||||
|
||||
@@ -555,49 +550,3 @@ maintained libraries. The externally maintained libraries used by Node are:
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
"""
|
||||
|
||||
- test/gc/node_modules/weak. Node-weak is a node.js addon that provides garbage
|
||||
collector notifications. Node-weak's license follows:
|
||||
"""
|
||||
Copyright (c) 2011, Ben Noordhuis <info@bnoordhuis.nl>
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
"""
|
||||
|
||||
- src/ngx-queue.h. ngx-queue.h is taken from the nginx source tree. nginx's
|
||||
license follows:
|
||||
"""
|
||||
Copyright (C) 2002-2012 Igor Sysoev
|
||||
Copyright (C) 2011,2012 Nginx, Inc.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
"""
|
||||
|
||||
212
Makefile
212
Makefile
@@ -1,65 +1,39 @@
|
||||
-include config.mk
|
||||
|
||||
BUILDTYPE ?= Release
|
||||
PYTHON ?= python
|
||||
DESTDIR ?=
|
||||
SIGN ?=
|
||||
WAF = $(PYTHON) tools/waf-light
|
||||
|
||||
# Default to verbose builds.
|
||||
# To do quiet/pretty builds, run `make V=` to set V to an empty string,
|
||||
# or set the V environment variable to an empty string.
|
||||
V ?= 1
|
||||
web_root = node@nodejs.org:~/web/nodejs.org/
|
||||
|
||||
# BUILDTYPE=Debug builds both release and debug builds. If you want to compile
|
||||
# just the debug build, run `make -C out BUILDTYPE=Debug` instead.
|
||||
ifeq ($(BUILDTYPE),Release)
|
||||
all: out/Makefile node
|
||||
else
|
||||
all: out/Makefile node node_g
|
||||
endif
|
||||
#
|
||||
# Because we recursively call make from waf we need to make sure that we are
|
||||
# using the correct make. Not all makes are GNU Make, but this likely only
|
||||
# works with gnu make. To deal with this we remember how the user invoked us
|
||||
# via a make builtin variable and use that in all subsequent operations
|
||||
#
|
||||
export NODE_MAKE := $(MAKE)
|
||||
|
||||
# The .PHONY is needed to ensure that we recursively use the out/Makefile
|
||||
# to check for changes.
|
||||
.PHONY: node node_g
|
||||
all: program
|
||||
@-[ -f out/Release/node ] && ls -lh out/Release/node
|
||||
|
||||
node: config.gypi out/Makefile
|
||||
$(MAKE) -C out BUILDTYPE=Release V=$(V)
|
||||
ln -fs out/Release/node node
|
||||
all-progress:
|
||||
@$(WAF) -p build
|
||||
|
||||
node_g: config.gypi out/Makefile
|
||||
$(MAKE) -C out BUILDTYPE=Debug V=$(V)
|
||||
ln -fs out/Debug/node node_g
|
||||
program:
|
||||
@$(WAF) --product-type=program build
|
||||
|
||||
config.gypi: configure
|
||||
./configure
|
||||
staticlib:
|
||||
@$(WAF) --product-type=cstaticlib build
|
||||
|
||||
out/Debug/node:
|
||||
$(MAKE) -C out BUILDTYPE=Debug V=$(V)
|
||||
dynamiclib:
|
||||
@$(WAF) --product-type=cshlib build
|
||||
|
||||
out/Makefile: common.gypi deps/uv/uv.gyp deps/http_parser/http_parser.gyp deps/zlib/zlib.gyp deps/v8/build/common.gypi deps/v8/tools/gyp/v8.gyp node.gyp config.gypi
|
||||
$(PYTHON) tools/gyp_node -f make
|
||||
|
||||
install: all
|
||||
$(PYTHON) tools/install.py $@ $(DESTDIR)
|
||||
install:
|
||||
@$(WAF) install
|
||||
|
||||
uninstall:
|
||||
$(PYTHON) tools/install.py $@ $(DESTDIR)
|
||||
|
||||
clean:
|
||||
-rm -rf out/Makefile node node_g out/$(BUILDTYPE)/node blog.html email.md
|
||||
-find out/ -name '*.o' -o -name '*.a' | xargs rm -rf
|
||||
-rm -rf node_modules
|
||||
|
||||
distclean:
|
||||
-rm -rf out
|
||||
-rm -f config.gypi
|
||||
-rm -f config.mk
|
||||
-rm -rf node node_g blog.html email.md
|
||||
-rm -rf node_modules
|
||||
@$(WAF) uninstall
|
||||
|
||||
test: all
|
||||
$(PYTHON) tools/test.py --mode=release simple message
|
||||
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ --exclude_files lib/punycode.js
|
||||
|
||||
test-http1: all
|
||||
$(PYTHON) tools/test.py --mode=release --use-http1 simple message
|
||||
@@ -67,16 +41,16 @@ test-http1: all
|
||||
test-valgrind: all
|
||||
$(PYTHON) tools/test.py --mode=release --valgrind simple message
|
||||
|
||||
test/gc/node_modules/weak/build:
|
||||
node_modules/weak:
|
||||
@if [ ! -f node ]; then make all; fi
|
||||
./node deps/npm/node_modules/node-gyp/bin/node-gyp rebuild \
|
||||
--directory="$(shell pwd)/test/gc/node_modules/weak" \
|
||||
--nodedir="$(shell pwd)"
|
||||
@if [ ! -d node_modules ]; then mkdir -p node_modules; fi
|
||||
./node deps/npm/bin/npm-cli.js install weak \
|
||||
--prefix="$(shell pwd)" --unsafe-perm # go ahead and run as root.
|
||||
|
||||
test-gc: all test/gc/node_modules/weak/build
|
||||
test-gc: all node_modules/weak
|
||||
$(PYTHON) tools/test.py --mode=release gc
|
||||
|
||||
test-all: all test/gc/node_modules/weak/build
|
||||
test-all: all node_modules/weak
|
||||
$(PYTHON) tools/test.py --mode=debug,release
|
||||
make test-npm
|
||||
|
||||
@@ -104,17 +78,19 @@ test-pummel: all
|
||||
test-internet: all
|
||||
$(PYTHON) tools/test.py internet
|
||||
|
||||
test-npm: node
|
||||
test-npm: all
|
||||
./node deps/npm/test/run.js
|
||||
|
||||
test-npm-publish: node
|
||||
test-npm-publish: all
|
||||
npm_package_config_publishtest=true ./node deps/npm/test/run.js
|
||||
|
||||
out/Release/node: all
|
||||
|
||||
apidoc_sources = $(wildcard doc/api/*.markdown)
|
||||
apidocs = $(addprefix out/,$(apidoc_sources:.markdown=.html)) \
|
||||
$(addprefix out/,$(apidoc_sources:.markdown=.json))
|
||||
|
||||
apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets out/doc/about out/doc/community out/doc/download out/doc/logos out/doc/images
|
||||
apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets out/doc/about out/doc/community out/doc/logos out/doc/images
|
||||
|
||||
apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*)))
|
||||
|
||||
@@ -132,18 +108,11 @@ website_files = \
|
||||
out/doc/pipe.css \
|
||||
out/doc/about/index.html \
|
||||
out/doc/community/index.html \
|
||||
out/doc/download/index.html \
|
||||
out/doc/logos/index.html \
|
||||
out/doc/changelog.html \
|
||||
$(doc_images)
|
||||
|
||||
doc: $(apidoc_dirs) $(website_files) $(apiassets) $(apidocs) tools/doc/ blog node
|
||||
|
||||
blogclean:
|
||||
rm -rf out/blog
|
||||
|
||||
blog: doc/blog out/Release/node tools/blog
|
||||
out/Release/node tools/blog/generate.js doc/blog/ out/blog/ doc/blog.html doc/rss.xml
|
||||
doc: program $(apidoc_dirs) $(website_files) $(apiassets) $(apidocs) tools/doc/
|
||||
|
||||
$(apidoc_dirs):
|
||||
mkdir -p $@
|
||||
@@ -173,9 +142,6 @@ email.md: ChangeLog tools/email-footer.md
|
||||
blog.html: email.md
|
||||
cat $< | ./node tools/doc/node_modules/.bin/marked > $@
|
||||
|
||||
blog-upload: blog
|
||||
rsync -r out/blog/ node@nodejs.org:~/web/nodejs.org/blog/
|
||||
|
||||
website-upload: doc
|
||||
rsync -r out/doc/ node@nodejs.org:~/web/nodejs.org/
|
||||
ssh node@nodejs.org '\
|
||||
@@ -192,31 +158,56 @@ docopen: out/doc/api/all.html
|
||||
docclean:
|
||||
-rm -rf out/doc
|
||||
|
||||
clean:
|
||||
$(WAF) clean
|
||||
-find tools -name "*.pyc" | xargs rm -f
|
||||
-rm -rf blog.html email.md
|
||||
-rm -rf node_modules
|
||||
|
||||
distclean: docclean
|
||||
-find tools -name "*.pyc" | xargs rm -f
|
||||
-rm -rf dist-osx
|
||||
-rm -rf out/ node node_g
|
||||
-rm -rf blog.html email.md
|
||||
|
||||
check:
|
||||
@tools/waf-light check
|
||||
|
||||
VERSION=v$(shell $(PYTHON) tools/getnodeversion.py)
|
||||
RELEASE=$(shell $(PYTHON) tools/getnodeisrelease.py)
|
||||
PLATFORM=$(shell uname | tr '[:upper:]' '[:lower:]')
|
||||
ifeq ($(findstring x86_64,$(shell uname -m)),x86_64)
|
||||
DESTCPU ?= x64
|
||||
else
|
||||
DESTCPU ?= ia32
|
||||
endif
|
||||
ifeq ($(DESTCPU),x64)
|
||||
ARCH=x64
|
||||
else
|
||||
ARCH=x86
|
||||
endif
|
||||
TARNAME=node-$(VERSION)
|
||||
TARBALL=$(TARNAME).tar.gz
|
||||
BINARYNAME=$(TARNAME)-$(PLATFORM)-$(ARCH)
|
||||
BINARYTAR=$(BINARYNAME).tar.gz
|
||||
PKG=out/$(TARNAME).pkg
|
||||
|
||||
packagemaker=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
|
||||
|
||||
dist: doc $(TARBALL) $(PKG)
|
||||
#dist: doc/node.1 doc/api
|
||||
dist: $(TARBALL) $(PKG)
|
||||
|
||||
PKGDIR=out/dist-osx
|
||||
|
||||
release-only:
|
||||
pkg: $(PKG)
|
||||
|
||||
$(PKG):
|
||||
-rm -rf $(PKGDIR)
|
||||
# Need to remove deps between architecture changes.
|
||||
rm -rf out/*/deps
|
||||
$(WAF) configure --prefix=/usr/local --without-snapshot --dest-cpu=ia32
|
||||
CFLAGS=-m32 DESTDIR=$(PKGDIR)/32 $(WAF) install
|
||||
rm -rf out/*/deps
|
||||
$(WAF) configure --prefix=/usr/local --without-snapshot --dest-cpu=x64
|
||||
CFLAGS=-m64 DESTDIR=$(PKGDIR) $(WAF) install
|
||||
lipo $(PKGDIR)/32/usr/local/bin/node \
|
||||
$(PKGDIR)/usr/local/bin/node \
|
||||
-output $(PKGDIR)/usr/local/bin/node-universal \
|
||||
-create
|
||||
mv $(PKGDIR)/usr/local/bin/node-universal $(PKGDIR)/usr/local/bin/node
|
||||
rm -rf $(PKGDIR)/32
|
||||
$(packagemaker) \
|
||||
--id "org.nodejs.NodeJS-$(VERSION)" \
|
||||
--doc tools/osx-pkg.pmdoc \
|
||||
--out $(PKG)
|
||||
|
||||
$(TARBALL): node doc
|
||||
@if [ "$(shell git status --porcelain | egrep -v '^\?\? ')" = "" ]; then \
|
||||
exit 0 ; \
|
||||
else \
|
||||
@@ -228,67 +219,25 @@ release-only:
|
||||
echo "" >&2 ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
@if [ "$(RELEASE)" = "1" ]; then \
|
||||
@if [ $(shell ./node --version) = "$(VERSION)" ]; then \
|
||||
exit 0; \
|
||||
else \
|
||||
echo "" >&2 ; \
|
||||
echo "#NODE_VERSION_IS_RELEASE is set to $(RELEASE)." >&2 ; \
|
||||
echo "$(shell ./node --version) doesn't match $(VERSION)." >&2 ; \
|
||||
echo "Did you remember to update src/node_version.cc?" >&2 ; \
|
||||
echo "" >&2 ; \
|
||||
exit 1 ; \
|
||||
fi
|
||||
|
||||
pkg: $(PKG)
|
||||
|
||||
$(PKG): release-only
|
||||
rm -rf $(PKGDIR)
|
||||
rm -rf out/deps out/Release
|
||||
./configure --prefix=$(PKGDIR)/32/usr/local --without-snapshot --dest-cpu=ia32
|
||||
$(MAKE) install V=$(V)
|
||||
rm -rf out/deps out/Release
|
||||
./configure --prefix=$(PKGDIR)/usr/local --without-snapshot --dest-cpu=x64
|
||||
$(MAKE) install V=$(V)
|
||||
SIGN="$(APP_SIGN)" PKGDIR="$(PKGDIR)" bash tools/osx-codesign.sh
|
||||
lipo $(PKGDIR)/32/usr/local/bin/node \
|
||||
$(PKGDIR)/usr/local/bin/node \
|
||||
-output $(PKGDIR)/usr/local/bin/node-universal \
|
||||
-create
|
||||
mv $(PKGDIR)/usr/local/bin/node-universal $(PKGDIR)/usr/local/bin/node
|
||||
rm -rf $(PKGDIR)/32
|
||||
$(packagemaker) \
|
||||
--id "org.nodejs.Node" \
|
||||
--doc tools/osx-pkg.pmdoc \
|
||||
--out $(PKG)
|
||||
SIGN="$(INT_SIGN)" PKG="$(PKG)" bash tools/osx-productsign.sh
|
||||
|
||||
$(TARBALL): release-only node doc
|
||||
git archive --format=tar --prefix=$(TARNAME)/ HEAD | tar xf -
|
||||
mkdir -p $(TARNAME)/doc/api
|
||||
cp doc/node.1 $(TARNAME)/doc/node.1
|
||||
cp -r out/doc/api/* $(TARNAME)/doc/api/
|
||||
rm -rf $(TARNAME)/deps/v8/test # too big
|
||||
rm -rf $(TARNAME)/doc/images # too big
|
||||
find $(TARNAME)/ -type l | xargs rm # annoying on windows
|
||||
tar -cf $(TARNAME).tar $(TARNAME)
|
||||
rm -rf $(TARNAME)
|
||||
gzip -f -9 $(TARNAME).tar
|
||||
|
||||
tar: $(TARBALL)
|
||||
|
||||
$(BINARYTAR): release-only
|
||||
rm -rf $(BINARYNAME)
|
||||
rm -rf out/deps out/Release
|
||||
./configure --prefix=/ --without-snapshot --dest-cpu=$(DESTCPU) $(CONFIG_FLAGS)
|
||||
$(MAKE) install DESTDIR=$(BINARYNAME) V=$(V) PORTABLE=1
|
||||
cp README.md $(BINARYNAME)
|
||||
cp LICENSE $(BINARYNAME)
|
||||
cp ChangeLog $(BINARYNAME)
|
||||
tar -cf $(BINARYNAME).tar $(BINARYNAME)
|
||||
rm -rf $(BINARYNAME)
|
||||
gzip -f -9 $(BINARYNAME).tar
|
||||
|
||||
binary: $(BINARYTAR)
|
||||
|
||||
dist-upload: $(TARBALL) $(PKG)
|
||||
ssh node@nodejs.org mkdir -p web/nodejs.org/dist/$(VERSION)
|
||||
scp $(TARBALL) node@nodejs.org:~/web/nodejs.org/dist/$(VERSION)/$(TARBALL)
|
||||
@@ -302,15 +251,12 @@ bench-idle:
|
||||
sleep 1
|
||||
./node benchmark/idle_clients.js &
|
||||
|
||||
jslintfix:
|
||||
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/fixjsstyle.py --strict --nojsdoc -r lib/ -r src/ --exclude_files lib/punycode.js
|
||||
|
||||
jslint:
|
||||
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ --exclude_files lib/punycode.js
|
||||
PYTHONPATH=tools/closure_linter/ $(PYTHON) tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ -r test/ --exclude_files lib/punycode.js
|
||||
|
||||
cpplint:
|
||||
@$(PYTHON) tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c)
|
||||
|
||||
lint: jslint cpplint
|
||||
|
||||
.PHONY: lint cpplint jslint bench clean docopen docclean doc dist distclean check uninstall install install-includes install-bin all staticlib dynamiclib test test-all website-upload pkg blog blogclean tar binary release-only
|
||||
.PHONY: lint cpplint jslint bench clean docopen docclean doc dist distclean dist-upload check uninstall install all program staticlib dynamiclib test test-all website-upload
|
||||
|
||||
319
Makefile-gyp
Normal file
319
Makefile-gyp
Normal file
@@ -0,0 +1,319 @@
|
||||
BUILDTYPE ?= Release
|
||||
|
||||
all: out/Makefile
|
||||
tools/gyp_node -f make
|
||||
$(MAKE) -C out BUILDTYPE=$(BUILDTYPE)
|
||||
-ln -fs out/Release/node node
|
||||
-ln -fs out/Debug/node node_g
|
||||
|
||||
out/Release/node: all
|
||||
|
||||
out/Makefile: node.gyp deps/uv/uv.gyp
|
||||
|
||||
clean:
|
||||
rm -rf out
|
||||
|
||||
distclean:
|
||||
rm -rf out
|
||||
|
||||
test: all
|
||||
python tools/test.py --mode=release simple message
|
||||
|
||||
test-http1: all
|
||||
python tools/test.py --mode=release --use-http1 simple message
|
||||
|
||||
test-valgrind: all
|
||||
python tools/test.py --mode=release --valgrind simple message
|
||||
|
||||
test-all: all
|
||||
python tools/test.py --mode=debug,release
|
||||
|
||||
test-all-http1: all
|
||||
python tools/test.py --mode=debug,release --use-http1
|
||||
|
||||
test-all-valgrind: all
|
||||
python tools/test.py --mode=debug,release --valgrind
|
||||
|
||||
test-release: all
|
||||
python tools/test.py --mode=release
|
||||
|
||||
test-debug: all
|
||||
python tools/test.py --mode=debug
|
||||
|
||||
test-message: all
|
||||
python tools/test.py message
|
||||
|
||||
test-simple: all
|
||||
python tools/test.py simple
|
||||
|
||||
test-pummel: all
|
||||
python tools/test.py pummel
|
||||
|
||||
test-internet: all
|
||||
python tools/test.py internet
|
||||
|
||||
UVTEST += simple/test-assert
|
||||
UVTEST += simple/test-buffer
|
||||
UVTEST += simple/test-c-ares
|
||||
UVTEST += simple/test-chdir
|
||||
UVTEST += simple/test-delayed-require
|
||||
UVTEST += simple/test-eio-race2
|
||||
UVTEST += simple/test-eio-race4
|
||||
UVTEST += simple/test-event-emitter-add-listeners
|
||||
UVTEST += simple/test-event-emitter-modify-in-emit
|
||||
UVTEST += simple/test-event-emitter-num-args
|
||||
UVTEST += simple/test-event-emitter-once
|
||||
UVTEST += simple/test-event-emitter-remove-all-listeners
|
||||
UVTEST += simple/test-event-emitter-remove-listeners
|
||||
UVTEST += simple/test-exception-handler
|
||||
UVTEST += simple/test-exception-handler2
|
||||
UVTEST += simple/test-exception-handler
|
||||
UVTEST += simple/test-executable-path
|
||||
UVTEST += simple/test-file-read-noexist
|
||||
UVTEST += simple/test-file-write-stream
|
||||
UVTEST += simple/test-fs-fsync
|
||||
UVTEST += simple/test-fs-open
|
||||
UVTEST += simple/test-fs-readfile-empty
|
||||
UVTEST += simple/test-fs-read-file-sync
|
||||
UVTEST += simple/test-fs-read-file-sync-hostname
|
||||
UVTEST += simple/test-fs-sir-writes-alot
|
||||
UVTEST += simple/test-fs-write
|
||||
UVTEST += simple/test-fs-write-buffer
|
||||
UVTEST += simple/test-fs-write-file
|
||||
UVTEST += simple/test-fs-write-file-buffer
|
||||
UVTEST += simple/test-fs-write-stream
|
||||
UVTEST += simple/test-fs-write-stream-end
|
||||
UVTEST += simple/test-fs-write-sync
|
||||
UVTEST += simple/test-global
|
||||
UVTEST += simple/test-http
|
||||
UVTEST += simple/test-http-1.0
|
||||
UVTEST += simple/test-http-abort-client
|
||||
UVTEST += simple/test-http-allow-req-after-204-res
|
||||
UVTEST += simple/test-http-blank-header
|
||||
UVTEST += simple/test-http-buffer-sanity
|
||||
UVTEST += simple/test-http-cat
|
||||
UVTEST += simple/test-http-chunked
|
||||
UVTEST += simple/test-http-client-abort
|
||||
UVTEST += simple/test-http-client-parse-error
|
||||
UVTEST += simple/test-http-client-race
|
||||
UVTEST += simple/test-http-client-race-2
|
||||
UVTEST += simple/test-http-client-upload
|
||||
UVTEST += simple/test-http-client-upload-buf
|
||||
UVTEST += simple/test-http-contentLength0
|
||||
UVTEST += simple/test-http-default-encoding
|
||||
UVTEST += simple/test-http-dns-fail
|
||||
UVTEST += simple/test-http-eof-on-connect
|
||||
UVTEST += simple/test-http-exceptions
|
||||
UVTEST += simple/test-http-expect-continue
|
||||
UVTEST += simple/test-http-extra-response
|
||||
UVTEST += simple/test-http-head-request
|
||||
UVTEST += simple/test-http-head-response-has-no-body
|
||||
UVTEST += simple/test-http-keep-alive
|
||||
UVTEST += simple/test-http-keep-alive-close-on-header
|
||||
UVTEST += simple/test-http-malformed-request
|
||||
UVTEST += simple/test-http-many-keep-alive-connections
|
||||
UVTEST += simple/test-http-mutable-headers
|
||||
UVTEST += simple/test-http-parser
|
||||
UVTEST += simple/test-http-proxy
|
||||
UVTEST += simple/test-http-request-end
|
||||
UVTEST += simple/test-http-response-close
|
||||
UVTEST += simple/test-http-response-readable
|
||||
UVTEST += simple/test-http-unix-socket
|
||||
UVTEST += simple/test-http-server
|
||||
UVTEST += simple/test-http-server-multiheaders
|
||||
UVTEST += simple/test-http-set-cookies
|
||||
UVTEST += simple/test-http-set-timeout
|
||||
UVTEST += simple/test-http-set-trailers
|
||||
UVTEST += simple/test-http-upgrade-agent
|
||||
UVTEST += simple/test-http-upgrade-client
|
||||
UVTEST += simple/test-http-upgrade-client2
|
||||
UVTEST += simple/test-http-upgrade-server
|
||||
UVTEST += simple/test-http-upgrade-server2
|
||||
UVTEST += simple/test-http-wget
|
||||
UVTEST += simple/test-http-write-empty-string
|
||||
UVTEST += simple/test-http-wget
|
||||
UVTEST += simple/test-mkdir-rmdir
|
||||
UVTEST += simple/test-net-binary
|
||||
UVTEST += simple/test-net-pingpong
|
||||
UVTEST += simple/test-net-can-reset-timeout
|
||||
UVTEST += simple/test-net-connect-buffer
|
||||
UVTEST += simple/test-net-connect-timeout
|
||||
UVTEST += simple/test-net-create-connection
|
||||
UVTEST += simple/test-net-eaddrinuse
|
||||
UVTEST += simple/test-net-isip
|
||||
UVTEST += simple/test-net-keepalive
|
||||
UVTEST += simple/test-net-pingpong
|
||||
UVTEST += simple/test-net-reconnect
|
||||
UVTEST += simple/test-net-remote-address-port
|
||||
UVTEST += simple/test-net-server-bind
|
||||
UVTEST += simple/test-net-server-max-connections
|
||||
UVTEST += simple/test-net-server-try-ports
|
||||
UVTEST += simple/test-net-stream
|
||||
UVTEST += simple/test-net-socket-timeout
|
||||
UVTEST += simple/test-next-tick
|
||||
UVTEST += simple/test-next-tick-doesnt-hang
|
||||
UVTEST += simple/test-next-tick-errors
|
||||
UVTEST += simple/test-next-tick-ordering
|
||||
UVTEST += simple/test-next-tick-ordering2
|
||||
UVTEST += simple/test-next-tick-starvation
|
||||
UVTEST += simple/test-module-load-list
|
||||
UVTEST += simple/test-path
|
||||
UVTEST += simple/test-pipe-stream
|
||||
UVTEST += simple/test-pump-file2tcp
|
||||
UVTEST += simple/test-pump-file2tcp-noexist
|
||||
UVTEST += simple/test-punycode
|
||||
UVTEST += simple/test-querystring
|
||||
UVTEST += simple/test-readdir
|
||||
UVTEST += simple/test-readdouble
|
||||
UVTEST += simple/test-readfloat
|
||||
UVTEST += simple/test-readint
|
||||
UVTEST += simple/test-readuint
|
||||
UVTEST += simple/test-regress-GH-819
|
||||
UVTEST += simple/test-regress-GH-897
|
||||
UVTEST += simple/test-regression-object-prototype
|
||||
UVTEST += simple/test-require-cache
|
||||
UVTEST += simple/test-require-cache-without-stat
|
||||
UVTEST += simple/test-require-exceptions
|
||||
UVTEST += simple/test-require-resolve
|
||||
UVTEST += simple/test-script-context
|
||||
UVTEST += simple/test-script-new
|
||||
UVTEST += simple/test-script-static-context
|
||||
UVTEST += simple/test-script-static-new
|
||||
UVTEST += simple/test-script-static-this
|
||||
UVTEST += simple/test-script-this
|
||||
UVTEST += simple/test-stream-pipe-cleanup
|
||||
UVTEST += simple/test-stream-pipe-error-handling
|
||||
UVTEST += simple/test-stream-pipe-event
|
||||
UVTEST += simple/test-stream-pipe-multi
|
||||
UVTEST += simple/test-string-decoder
|
||||
UVTEST += simple/test-sys
|
||||
UVTEST += simple/test-tcp-wrap
|
||||
UVTEST += simple/test-tcp-wrap-connect
|
||||
UVTEST += simple/test-tcp-wrap-listen
|
||||
UVTEST += simple/test-timers-linked-list
|
||||
UVTEST += simple/test-tty-stdout-end
|
||||
UVTEST += simple/test-url
|
||||
UVTEST += simple/test-utf8-scripts
|
||||
UVTEST += simple/test-vm-create-context-circular-reference
|
||||
UVTEST += simple/test-writedouble
|
||||
UVTEST += simple/test-writefloat
|
||||
UVTEST += simple/test-writeint
|
||||
UVTEST += simple/test-writeuint
|
||||
UVTEST += simple/test-zerolengthbufferbug
|
||||
UVTEST += pummel/test-http-client-reconnect-bug
|
||||
UVTEST += pummel/test-http-upload-timeout
|
||||
UVTEST += pummel/test-net-many-clients
|
||||
UVTEST += pummel/test-net-pause
|
||||
UVTEST += pummel/test-net-pingpong-delay
|
||||
UVTEST += pummel/test-net-timeout
|
||||
UVTEST += pummel/test-timers
|
||||
UVTEST += pummel/test-timer-wrap
|
||||
UVTEST += pummel/test-timer-wrap2
|
||||
UVTEST += pummel/test-vm-memleak
|
||||
UVTEST += internet/test-dns
|
||||
UVTEST += simple/test-tls-client-abort
|
||||
UVTEST += simple/test-tls-client-verify
|
||||
UVTEST += simple/test-tls-connect
|
||||
#UVTEST += simple/test-tls-ext-key-usage # broken
|
||||
UVTEST += simple/test-tls-junk-closes-server
|
||||
UVTEST += simple/test-tls-npn-server-client
|
||||
UVTEST += simple/test-tls-request-timeout
|
||||
#UVTEST += simple/test-tls-securepair-client # broken
|
||||
UVTEST += simple/test-tls-securepair-server
|
||||
#UVTEST += simple/test-tls-server-verify # broken
|
||||
UVTEST += simple/test-tls-set-encoding
|
||||
|
||||
# child_process
|
||||
UVTEST += simple/test-child-process-exit-code
|
||||
UVTEST += simple/test-child-process-buffering
|
||||
UVTEST += simple/test-child-process-exec-cwd
|
||||
UVTEST += simple/test-child-process-cwd
|
||||
UVTEST += simple/test-child-process-env
|
||||
UVTEST += simple/test-child-process-stdin
|
||||
UVTEST += simple/test-child-process-ipc
|
||||
UVTEST += simple/test-child-process-deprecated-api
|
||||
|
||||
|
||||
test-uv: all
|
||||
NODE_USE_UV=1 python tools/test.py $(UVTEST)
|
||||
|
||||
test-uv-debug: all
|
||||
NODE_USE_UV=1 python tools/test.py --mode=debug $(UVTEST)
|
||||
|
||||
|
||||
apidoc_sources = $(wildcard doc/api/*.markdown)
|
||||
apidocs = $(addprefix out/,$(apidoc_sources:.markdown=.html))
|
||||
|
||||
apidoc_dirs = out/doc out/doc/api/ out/doc/api/assets
|
||||
|
||||
apiassets = $(subst api_assets,api/assets,$(addprefix out/,$(wildcard doc/api_assets/*)))
|
||||
|
||||
website_files = \
|
||||
out/doc/index.html \
|
||||
out/doc/v0.4_announcement.html \
|
||||
out/doc/cla.html \
|
||||
out/doc/sh_main.js \
|
||||
out/doc/sh_javascript.min.js \
|
||||
out/doc/sh_vim-dark.css \
|
||||
out/doc/logo.png \
|
||||
out/doc/sponsored.png \
|
||||
out/doc/favicon.ico \
|
||||
out/doc/pipe.css
|
||||
|
||||
doc: out/Release/node $(apidoc_dirs) $(website_files) $(apiassets) $(apidocs)
|
||||
|
||||
$(apidoc_dirs):
|
||||
mkdir -p $@
|
||||
|
||||
out/doc/api/assets/%: doc/api_assets/% out/doc/api/assets/
|
||||
cp $< $@
|
||||
|
||||
out/doc/%: doc/%
|
||||
cp $< $@
|
||||
|
||||
out/doc/api/%.html: doc/api/%.markdown out/Release/node $(apidoc_dirs) $(apiassets) tools/doctool/doctool.js
|
||||
out/Release/node tools/doctool/doctool.js doc/template.html $< > $@
|
||||
|
||||
out/doc/%:
|
||||
|
||||
website-upload: doc
|
||||
scp -r out/doc/* $(web_root)
|
||||
|
||||
docopen: out/doc/api/all.html
|
||||
-google-chrome out/doc/api/all.html
|
||||
|
||||
docclean:
|
||||
-rm -rf out/doc
|
||||
|
||||
VERSION=$(shell git describe)
|
||||
TARNAME=node-$(VERSION)
|
||||
|
||||
#dist: doc/node.1 doc/api
|
||||
dist: doc
|
||||
git archive --format=tar --prefix=$(TARNAME)/ HEAD | tar xf -
|
||||
mkdir -p $(TARNAME)/doc
|
||||
cp doc/node.1 $(TARNAME)/doc/node.1
|
||||
cp -r out/doc/api $(TARNAME)/doc/api
|
||||
rm -rf $(TARNAME)/deps/v8/test # too big
|
||||
rm -rf $(TARNAME)/doc/logos # too big
|
||||
tar -cf $(TARNAME).tar $(TARNAME)
|
||||
rm -rf $(TARNAME)
|
||||
gzip -f -9 $(TARNAME).tar
|
||||
|
||||
bench:
|
||||
benchmark/http_simple_bench.sh
|
||||
|
||||
bench-idle:
|
||||
./node benchmark/idle_server.js &
|
||||
sleep 1
|
||||
./node benchmark/idle_clients.js &
|
||||
|
||||
jslint:
|
||||
PYTHONPATH=tools/closure_linter/ python tools/closure_linter/closure_linter/gjslint.py --unix_mode --strict --nojsdoc -r lib/ -r src/ -r test/
|
||||
|
||||
cpplint:
|
||||
@python tools/cpplint.py $(wildcard src/*.cc src/*.h src/*.c)
|
||||
|
||||
lint: jslint cpplint
|
||||
|
||||
.PHONY: lint cpplint jslint bench clean docopen docclean doc dist distclean check uninstall install all program staticlib dynamiclib test test-all website-upload
|
||||
16
README.md
16
README.md
@@ -3,26 +3,12 @@ Evented I/O for V8 javascript. [:
|
||||
|
||||
* Python 2.6 or 2.7
|
||||
* GNU Make 3.81 or newer
|
||||
* libexecinfo (FreeBSD and OpenBSD only)
|
||||
|
||||
Unix/Macintosh:
|
||||
Unix/Macintosh (requires python 2.6 or 2.7):
|
||||
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
If your python binary is in a non-standard location or has a
|
||||
non-standard name, run the following instead:
|
||||
|
||||
export PYTHON=/path/to/python
|
||||
$PYTHON ./configure
|
||||
make
|
||||
make install
|
||||
|
||||
Windows:
|
||||
|
||||
vcbuild.bat
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
// first start node http_simple.js
|
||||
var http = require('http');
|
||||
|
||||
var latency = [];
|
||||
|
||||
var numRequests = parseInt(process.argv[2], 10) || 100;
|
||||
var maxSockets = parseInt(process.argv[3], 10) || 100;
|
||||
var runs = parseInt(process.argv[4], 10) || 100;
|
||||
var prefix = process.argv[5] || '';
|
||||
if (prefix) prefix += '_';
|
||||
var r = 0;
|
||||
|
||||
var port = parseInt(process.env.PORT, 10) || 8000;
|
||||
var host = process.env.HOST || '127.0.0.1';
|
||||
|
||||
http.globalAgent.maxSockets = maxSockets;
|
||||
|
||||
run();
|
||||
|
||||
function run() {
|
||||
if (r++ === runs) {
|
||||
return finish();
|
||||
}
|
||||
|
||||
// make numRequests in parallel
|
||||
// retain the order in which they are *made*. This requires trapping
|
||||
// each one in a closure, since otherwise, we'll of course end
|
||||
// up mostly sorting them in ascending order, since the cb from a
|
||||
// fast request will almost always be called before the cb from a
|
||||
// slow one.
|
||||
var c = numRequests;
|
||||
var lat = [];
|
||||
latency.push(lat);
|
||||
for (var i = 0; i < numRequests; i++) (function (i) {
|
||||
makeRequest(function(l) {
|
||||
lat[i] = l;
|
||||
c--;
|
||||
if (c === 0) run();
|
||||
});
|
||||
})(i);
|
||||
}
|
||||
|
||||
function makeRequest(cb) {
|
||||
var opts = { host: host,
|
||||
port: port,
|
||||
uri: 'http://'+host+':'+port+'/bytes/12',
|
||||
forever: true,
|
||||
path: '/bytes/12' };
|
||||
var pre = Date.now();
|
||||
var req = http.get(opts, function(res) {
|
||||
return cb(Date.now() - pre);
|
||||
});
|
||||
}
|
||||
|
||||
function finish() {
|
||||
var data = [];
|
||||
latency.forEach(function(run, i) {
|
||||
run.forEach(function(l, j) {
|
||||
data[j] = data[j] || [];
|
||||
data[j][i] = l;
|
||||
});
|
||||
});
|
||||
|
||||
data = data.map(function (l, i) {
|
||||
return l.join('\t')
|
||||
}).join('\n') + '\n';
|
||||
|
||||
var fname = prefix +
|
||||
'client_latency_' +
|
||||
numRequests + '_' +
|
||||
maxSockets + '_' +
|
||||
runs + '.tab';
|
||||
var path = require('path');
|
||||
fname = path.resolve(__dirname, '..', 'out', fname);
|
||||
fname = path.relative(process.cwd(), fname);
|
||||
require('fs').writeFile(fname, data, function(er) {
|
||||
if (er) throw er;
|
||||
console.log('written: %s', fname);
|
||||
});
|
||||
}
|
||||
@@ -36,16 +36,16 @@ function round(n) {
|
||||
return Math.floor(n * 100) / 100;
|
||||
}
|
||||
|
||||
var start = process.hrtime();
|
||||
var start = Date.now();
|
||||
while (concurrency--) readFile();
|
||||
|
||||
function readFile() {
|
||||
if (!go) {
|
||||
process.stdout.write('\n');
|
||||
console.log('read the file %d times (higher is better)', count);
|
||||
var end = process.hrtime();
|
||||
var elapsed = [end[0] - start[0], end[1] - start[1]];
|
||||
var ns = elapsed[0] * 1E9 + elapsed[1];
|
||||
var end = Date.now();
|
||||
var elapsed = (end - start) / 1000;
|
||||
var ns = elapsed * 1E9;
|
||||
var nsper = round(ns / count);
|
||||
console.log('%d ns per read (lower is better)', nsper);
|
||||
var readsper = round(count / (ns / 1E9));
|
||||
|
||||
@@ -1,43 +1,12 @@
|
||||
#!/bin/bash
|
||||
cd "$(dirname "$(dirname $0)")"
|
||||
|
||||
if type sysctl &>/dev/null; then
|
||||
# darwin and linux
|
||||
sudo sysctl -w net.ipv4.ip_local_port_range="12000 65535"
|
||||
sudo sysctl -w net.inet.ip.portrange.first=12000
|
||||
sudo sysctl -w net.inet.tcp.msl=1000
|
||||
sudo sysctl -w kern.maxfiles=1000000 kern.maxfilesperproc=1000000
|
||||
elif type /usr/sbin/ndd &>/dev/null; then
|
||||
# sunos
|
||||
/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 12000
|
||||
/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65535
|
||||
/usr/sbin/ndd -set /dev/tcp tcp_max_buf 2097152
|
||||
/usr/sbin/ndd -set /dev/tcp tcp_xmit_hiwat 1048576
|
||||
/usr/sbin/ndd -set /dev/tcp tcp_recv_hiwat 1048576
|
||||
fi
|
||||
|
||||
sudo sysctl -w net.inet.ip.portrange.first=12000
|
||||
sudo sysctl -w net.inet.tcp.msl=1000
|
||||
sudo sysctl -w kern.maxfiles=1000000 kern.maxfilesperproc=1000000
|
||||
ulimit -n 100000
|
||||
|
||||
k=${KEEPALIVE}
|
||||
if [ "$k" = "no" ]; then
|
||||
k=""
|
||||
else
|
||||
k="-k"
|
||||
fi
|
||||
node=${NODE:-./node}
|
||||
|
||||
$node benchmark/http_simple.js &
|
||||
npid=$!
|
||||
|
||||
./node benchmark/http_simple.js || exit 1 &
|
||||
sleep 1
|
||||
|
||||
if [ "$k" = "-k" ]; then
|
||||
echo "using keepalive"
|
||||
fi
|
||||
|
||||
for i in a a a a a a a a a a a a a a a a a a a a; do
|
||||
ab $k -t 10 -c 100 http://127.0.0.1:8000/${TYPE:-bytes}/${LENGTH:-1024} \
|
||||
2>&1 | grep Req | egrep -o '[0-9\.]+'
|
||||
done
|
||||
|
||||
kill $npid
|
||||
ab -n 30000 -c 100 http://127.0.0.1:8000/${TYPE:-bytes}/${LENGTH:-1024} | grep Req
|
||||
killall node
|
||||
|
||||
@@ -1,127 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
var spawn = require('child_process').spawn;
|
||||
var cluster = require('cluster');
|
||||
var http = require('http');
|
||||
|
||||
var options = {
|
||||
mode: 'master',
|
||||
host: '127.0.0.1',
|
||||
port: 22344,
|
||||
path: '/',
|
||||
servers: 1,
|
||||
clients: 1
|
||||
};
|
||||
|
||||
for (var i = 2; i < process.argv.length; ++i) {
|
||||
var args = process.argv[i].split('=', 2);
|
||||
var key = args[0];
|
||||
var val = args[1];
|
||||
options[key] = val;
|
||||
}
|
||||
|
||||
switch (options.mode) {
|
||||
case 'master': startMaster(); break;
|
||||
case 'server': startServer(); break;
|
||||
case 'client': startClient(); break;
|
||||
default: throw new Error('Bad mode: ' + options.mode);
|
||||
}
|
||||
|
||||
process.title = 'http_bench[' + options.mode + ']';
|
||||
|
||||
// monkey-patch the log functions so they include name + pid
|
||||
console.log = patch(console.log);
|
||||
console.trace = patch(console.trace);
|
||||
console.error = patch(console.error);
|
||||
|
||||
function patch(fun) {
|
||||
var prefix = process.title + '[' + process.pid + '] ';
|
||||
return function() {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
args[0] = prefix + args[0];
|
||||
return fun.apply(console, args);
|
||||
};
|
||||
}
|
||||
|
||||
function startMaster() {
|
||||
if (!cluster.isMaster) return startServer();
|
||||
|
||||
for (var i = ~~options.servers; i > 0; --i) cluster.fork();
|
||||
|
||||
for (var i = ~~options.clients; i > 0; --i) {
|
||||
var cp = spawn(process.execPath, [__filename, 'mode=client']);
|
||||
cp.stdout.pipe(process.stdout);
|
||||
cp.stderr.pipe(process.stderr);
|
||||
}
|
||||
}
|
||||
|
||||
function startServer() {
|
||||
http.createServer(onRequest).listen(options.port, options.host);
|
||||
|
||||
var body = Array(1024).join('x');
|
||||
var headers = {'Content-Length': '' + body.length};
|
||||
|
||||
function onRequest(req, res) {
|
||||
req.on('error', onError);
|
||||
res.on('error', onError);
|
||||
res.writeHead(200, headers);
|
||||
res.end(body);
|
||||
}
|
||||
|
||||
function onError(err) {
|
||||
console.error(err.stack);
|
||||
}
|
||||
}
|
||||
|
||||
function startClient() {
|
||||
// send off a bunch of concurrent requests
|
||||
// TODO make configurable
|
||||
sendRequest();
|
||||
sendRequest();
|
||||
|
||||
function sendRequest() {
|
||||
var req = http.request(options, onConnection);
|
||||
req.on('error', onError);
|
||||
req.end();
|
||||
}
|
||||
|
||||
// add a little back-off to prevent EADDRNOTAVAIL errors, it's pretty easy
|
||||
// to exhaust the available port range
|
||||
function relaxedSendRequest() {
|
||||
setTimeout(sendRequest, 1);
|
||||
}
|
||||
|
||||
function onConnection(res) {
|
||||
res.on('error', onError);
|
||||
res.on('data', onData);
|
||||
res.on('end', relaxedSendRequest);
|
||||
}
|
||||
|
||||
function onError(err) {
|
||||
console.error(err.stack);
|
||||
relaxedSendRequest();
|
||||
}
|
||||
|
||||
function onData(data) {
|
||||
// this space intentionally left blank
|
||||
}
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
var http = require('http');
|
||||
var port = parseInt(process.env.PORT, 10) || 8000;
|
||||
var defaultLag = parseInt(process.argv[2], 10) || 100;
|
||||
|
||||
http.createServer(function(req, res) {
|
||||
res.writeHead(200, { 'content-type': 'text/plain',
|
||||
'content-length': '2' });
|
||||
|
||||
var lag = parseInt(req.url.split("/").pop(), 10) || defaultLag;
|
||||
setTimeout(function() {
|
||||
res.end('ok');
|
||||
}, lag);
|
||||
}).listen(port, 'localhost');
|
||||
@@ -96,12 +96,13 @@ var server = http.createServer(function (req, res) {
|
||||
'Transfer-Encoding': 'chunked' });
|
||||
// send body in chunks
|
||||
var len = body.length;
|
||||
var step = Math.floor(len / n_chunks) || 1;
|
||||
var step = ~~(len / n_chunks) || len;
|
||||
|
||||
for (var i = 0, n = (n_chunks - 1); i < n; ++i) {
|
||||
res.write(body.slice(i * step, i * step + step));
|
||||
for (var i = 0; i < len; i += step) {
|
||||
res.write(body.slice(i, i + step));
|
||||
}
|
||||
res.end(body.slice((n_chunks - 1) * step));
|
||||
|
||||
res.end();
|
||||
} else {
|
||||
var content_length = body.length.toString();
|
||||
|
||||
|
||||
@@ -77,12 +77,13 @@ var server = http.createServer(function (req, res) {
|
||||
"Transfer-Encoding": "chunked" });
|
||||
// send body in chunks
|
||||
var len = body.length;
|
||||
var step = Math.floor(len / n_chunks) || 1;
|
||||
var step = ~~(len / n_chunks) || len;
|
||||
|
||||
for (var i = 0, n = (n_chunks - 1); i < n; ++i) {
|
||||
res.write(body.slice(i * step, i * step + step));
|
||||
for (var i = 0; i < len; i += step) {
|
||||
res.write(body.slice(i, i + step));
|
||||
}
|
||||
res.end(body.slice((n_chunks - 1) * step));
|
||||
|
||||
res.end();
|
||||
} else {
|
||||
var content_length = body.length.toString();
|
||||
|
||||
@@ -104,24 +105,5 @@ server.listen(port, function () {
|
||||
cp.stderr.pipe(process.stderr);
|
||||
cp.on('exit', function() {
|
||||
server.close();
|
||||
process.nextTick(dump_mm_stats);
|
||||
});
|
||||
});
|
||||
|
||||
function dump_mm_stats() {
|
||||
if (typeof gc != 'function') return;
|
||||
|
||||
var before = process.memoryUsage();
|
||||
for (var i = 0; i < 10; ++i) gc();
|
||||
var after = process.memoryUsage();
|
||||
setTimeout(print_stats, 250); // give GC time to settle
|
||||
|
||||
function print_stats() {
|
||||
console.log('\nBEFORE / AFTER GC');
|
||||
['rss', 'heapTotal', 'heapUsed'].forEach(function(key) {
|
||||
var a = before[key] / (1024 * 1024);
|
||||
var b = after[key] / (1024 * 1024);
|
||||
console.log('%sM / %sM %s', a.toFixed(2), b.toFixed(2), key);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
|
||||
var assert = require('assert'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
tls = require('tls');
|
||||
|
||||
|
||||
var target_connections = 10000,
|
||||
concurrency = 10;
|
||||
|
||||
for (var i = 2; i < process.argv.length; i++) {
|
||||
switch (process.argv[i]) {
|
||||
case '-c':
|
||||
concurrency = ~~process.argv[++i];
|
||||
break;
|
||||
|
||||
case '-n':
|
||||
target_connections = ~~process.argv[++i];
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Error('Invalid flag: ' + process.argv[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var cert_dir = path.resolve(__dirname, '../test/fixtures'),
|
||||
options = { key: fs.readFileSync(cert_dir + '/test_key.pem'),
|
||||
cert: fs.readFileSync(cert_dir + '/test_cert.pem'),
|
||||
ca: [ fs.readFileSync(cert_dir + '/test_ca.pem') ] };
|
||||
|
||||
var server = tls.createServer(options, onConnection);
|
||||
server.listen(8000);
|
||||
|
||||
|
||||
var initiated_connections = 0,
|
||||
server_connections = 0,
|
||||
client_connections = 0,
|
||||
start = Date.now();
|
||||
|
||||
for (var i = 0; i < concurrency; i++)
|
||||
makeConnection();
|
||||
|
||||
|
||||
process.on('exit', onExit);
|
||||
|
||||
|
||||
function makeConnection() {
|
||||
if (initiated_connections >= target_connections)
|
||||
return;
|
||||
|
||||
initiated_connections++;
|
||||
|
||||
var conn = tls.connect(8000, function() {
|
||||
client_connections++;
|
||||
|
||||
if (client_connections % 100 === 0)
|
||||
console.log(client_connections + ' of ' + target_connections +
|
||||
' connections made');
|
||||
|
||||
conn.end();
|
||||
makeConnection();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function onConnection(conn) {
|
||||
server_connections++;
|
||||
|
||||
if (server_connections === target_connections)
|
||||
server.close();
|
||||
}
|
||||
|
||||
|
||||
function onExit() {
|
||||
var end = Date.now(),
|
||||
s = (end - start) / 1000,
|
||||
persec = Math.round(target_connections / s);
|
||||
|
||||
assert.equal(initiated_connections, target_connections);
|
||||
assert.equal(client_connections, target_connections);
|
||||
assert.equal(server_connections, target_connections);
|
||||
|
||||
console.log('%d connections in %d s', target_connections, s);
|
||||
console.log('%d connections per second', persec);
|
||||
}
|
||||
@@ -1,63 +0,0 @@
|
||||
// Copyright Joyent, Inc. and other Node contributors.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||
// copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||
// persons to whom the Software is furnished to do so, subject to the
|
||||
// following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included
|
||||
// in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
if (!process.versions.openssl) {
|
||||
console.error('Skipping because node compiled without OpenSSL.');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
var common = require('../common');
|
||||
var assert = require('assert');
|
||||
var tls = require('tls');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
|
||||
var options = {
|
||||
key: fs.readFileSync(path.join(common.fixturesDir, 'test_key.pem')),
|
||||
cert: fs.readFileSync(path.join(common.fixturesDir, 'test_cert.pem'))
|
||||
};
|
||||
|
||||
var fragment = 'fr';
|
||||
var dataSize = 1024 * 1024;
|
||||
var sent = 0;
|
||||
var received = 0;
|
||||
|
||||
var server = tls.createServer(options, function (stream) {
|
||||
for (sent = 0; sent <= dataSize; sent += fragment.length) {
|
||||
stream.write(fragment);
|
||||
}
|
||||
stream.end();
|
||||
});
|
||||
|
||||
server.listen(common.PORT, function () {
|
||||
var client = tls.connect(common.PORT, function () {
|
||||
client.on('data', function (data) {
|
||||
received += data.length;
|
||||
});
|
||||
client.on('end', function () {
|
||||
server.close();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
process.on('exit', function () {
|
||||
assert.equal(sent, received);
|
||||
});
|
||||
100
common.gypi
100
common.gypi
@@ -1,29 +1,13 @@
|
||||
{
|
||||
'variables': {
|
||||
'visibility%': 'hidden', # V8's visibility setting
|
||||
'target_arch%': 'ia32', # set v8's target architecture
|
||||
'host_arch%': 'ia32', # set v8's host architecture
|
||||
'want_separate_host_toolset': 0, # V8 should not build target and host
|
||||
'library%': 'static_library', # allow override to 'shared_library' for DLL/.so builds
|
||||
'component%': 'static_library', # NB. these names match with what V8 expects
|
||||
'msvs_multi_core_compile': '0', # we do enable multicore compiles, but not using the V8 way
|
||||
'gcc_version%': 'unknown',
|
||||
'clang%': 0,
|
||||
|
||||
# Turn on optimizations that may trigger compiler bugs.
|
||||
# Use at your own risk. Do *NOT* report bugs if this option is enabled.
|
||||
'node_unsafe_optimizations%': 0,
|
||||
|
||||
# Enable V8's post-mortem debugging only on unix flavors.
|
||||
'conditions': [
|
||||
['OS != "win"', {
|
||||
'v8_postmortem_support': 'true'
|
||||
}]
|
||||
],
|
||||
},
|
||||
|
||||
'target_defaults': {
|
||||
'default_configuration': 'Release',
|
||||
'default_configuration': 'Debug',
|
||||
'configurations': {
|
||||
'Debug': {
|
||||
'defines': [ 'DEBUG', '_DEBUG' ],
|
||||
@@ -35,7 +19,13 @@
|
||||
],
|
||||
'msvs_settings': {
|
||||
'VCCLCompilerTool': {
|
||||
'RuntimeLibrary': 1, # static debug
|
||||
'target_conditions': [
|
||||
['library=="static_library"', {
|
||||
'RuntimeLibrary': 1, # static debug
|
||||
}, {
|
||||
'RuntimeLibrary': 3, # DLL debug
|
||||
}],
|
||||
],
|
||||
'Optimization': 0, # /Od, no optimization
|
||||
'MinimalRebuild': 'false',
|
||||
'OmitFramePointers': 'false',
|
||||
@@ -47,42 +37,22 @@
|
||||
},
|
||||
},
|
||||
'Release': {
|
||||
'defines': [ 'NDEBUG' ],
|
||||
'cflags': [ '-O3', '-fomit-frame-pointer', '-fdata-sections', '-ffunction-sections' ],
|
||||
'conditions': [
|
||||
['target_arch=="x64"', {
|
||||
'msvs_configuration_platform': 'x64',
|
||||
}],
|
||||
['node_unsafe_optimizations==1', {
|
||||
'cflags': [ '-O3', '-ffunction-sections', '-fdata-sections' ],
|
||||
'ldflags': [ '-Wl,--gc-sections' ],
|
||||
}, {
|
||||
'cflags': [ '-O2', '-fno-strict-aliasing' ],
|
||||
'cflags!': [ '-O3', '-fstrict-aliasing' ],
|
||||
'conditions': [
|
||||
# Required by the dtrace post-processor. Unfortunately,
|
||||
# some gcc/binutils combos generate bad code when
|
||||
# -ffunction-sections is enabled. Let's hope for the best.
|
||||
['OS=="solaris"', {
|
||||
'cflags': [ '-ffunction-sections', '-fdata-sections' ],
|
||||
}, {
|
||||
'cflags!': [ '-ffunction-sections', '-fdata-sections' ],
|
||||
}],
|
||||
['clang == 0 and gcc_version >= 40', {
|
||||
'cflags': [ '-fno-tree-vrp' ],
|
||||
}],
|
||||
['clang == 0 and gcc_version <= 44', {
|
||||
'cflags': [ '-fno-tree-sink' ],
|
||||
}],
|
||||
],
|
||||
}],
|
||||
['OS=="solaris"', {
|
||||
'cflags': [ '-fno-omit-frame-pointer' ],
|
||||
# pull in V8's postmortem metadata
|
||||
'ldflags': [ '-Wl,-z,allextract' ]
|
||||
}],
|
||||
],
|
||||
'msvs_settings': {
|
||||
'VCCLCompilerTool': {
|
||||
'RuntimeLibrary': 0, # static release
|
||||
'target_conditions': [
|
||||
['library=="static_library"', {
|
||||
'RuntimeLibrary': 0, # static release
|
||||
}, {
|
||||
'RuntimeLibrary': 2, # debug release
|
||||
}],
|
||||
],
|
||||
'Optimization': 3, # /Ox, full optimization
|
||||
'FavorSizeOrSpeed': 1, # /Ot, favour speed over size
|
||||
'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible
|
||||
@@ -90,8 +60,6 @@
|
||||
'OmitFramePointers': 'true',
|
||||
'EnableFunctionLevelLinking': 'true',
|
||||
'EnableIntrinsicFunctions': 'true',
|
||||
'RuntimeTypeInfo': 'false',
|
||||
'ExceptionHandling': '0',
|
||||
'AdditionalOptions': [
|
||||
'/MP', # compile across multiple CPUs
|
||||
],
|
||||
@@ -154,35 +122,25 @@
|
||||
'BUILDING_V8_SHARED=1',
|
||||
'BUILDING_UV_SHARED=1',
|
||||
],
|
||||
}, {
|
||||
'defines': [
|
||||
'_LARGEFILE_SOURCE',
|
||||
'_FILE_OFFSET_BITS=64',
|
||||
],
|
||||
}],
|
||||
[ 'OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris"', {
|
||||
'cflags': [ '-Wall', '-pthread', ],
|
||||
'cflags_cc': [ '-fno-rtti', '-fno-exceptions' ],
|
||||
'ldflags': [ '-pthread', '-rdynamic' ],
|
||||
'ldflags': [ '-pthread', ],
|
||||
'conditions': [
|
||||
[ 'target_arch=="ia32"', {
|
||||
'cflags': [ '-m32' ],
|
||||
'ldflags': [ '-m32' ],
|
||||
}],
|
||||
[ 'target_arch=="x64"', {
|
||||
'cflags': [ '-m64' ],
|
||||
'ldflags': [ '-m64' ],
|
||||
[ 'OS=="linux"', {
|
||||
'cflags': [ '-ansi' ],
|
||||
}],
|
||||
[ 'OS=="solaris"', {
|
||||
'cflags': [ '-pthreads' ],
|
||||
'ldflags': [ '-pthreads' ],
|
||||
'cflags!': [ '-pthread' ],
|
||||
'ldflags!': [ '-pthread' ],
|
||||
[ 'visibility=="hidden"', {
|
||||
'cflags': [ '-fvisibility=hidden' ],
|
||||
}],
|
||||
],
|
||||
}],
|
||||
['OS=="mac"', {
|
||||
'defines': ['_DARWIN_USE_64_BIT_INODE=1'],
|
||||
'xcode_settings': {
|
||||
'ALWAYS_SEARCH_USER_PATHS': 'NO',
|
||||
'GCC_CW_ASM_SYNTAX': 'NO', # No -fasm-blocks
|
||||
@@ -191,10 +149,14 @@
|
||||
'GCC_ENABLE_CPP_EXCEPTIONS': 'NO', # -fno-exceptions
|
||||
'GCC_ENABLE_CPP_RTTI': 'NO', # -fno-rtti
|
||||
'GCC_ENABLE_PASCAL_STRINGS': 'NO', # No -mpascal-strings
|
||||
# GCC_INLINES_ARE_PRIVATE_EXTERN maps to -fvisibility-inlines-hidden
|
||||
'GCC_INLINES_ARE_PRIVATE_EXTERN': 'YES',
|
||||
'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', # -fvisibility=hidden
|
||||
'GCC_THREADSAFE_STATICS': 'NO', # -fno-threadsafe-statics
|
||||
'GCC_VERSION': '4.2',
|
||||
'GCC_WARN_ABOUT_MISSING_NEWLINE': 'YES', # -Wnewline-eof
|
||||
'MACOSX_DEPLOYMENT_TARGET': '10.4', # -mmacosx-version-min=10.4
|
||||
'PREBINDING': 'NO', # No -Wl,-prebind
|
||||
'MACOSX_DEPLOYMENT_TARGET': '10.5', # -mmacosx-version-min=10.5
|
||||
'USE_HEADERMAP': 'NO',
|
||||
'OTHER_CFLAGS': [
|
||||
'-fno-strict-aliasing',
|
||||
@@ -211,14 +173,6 @@
|
||||
'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-search_paths_first']},
|
||||
}],
|
||||
],
|
||||
'conditions': [
|
||||
['target_arch=="ia32"', {
|
||||
'xcode_settings': {'ARCHS': ['i386']},
|
||||
}],
|
||||
['target_arch=="x64"', {
|
||||
'xcode_settings': {'ARCHS': ['x86_64']},
|
||||
}],
|
||||
],
|
||||
}],
|
||||
],
|
||||
}
|
||||
|
||||
520
configure
vendored
520
configure
vendored
@@ -1,507 +1,25 @@
|
||||
#!/usr/bin/env python
|
||||
import optparse
|
||||
import os
|
||||
import pprint
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
#! /bin/sh
|
||||
|
||||
CC = os.environ.get('CC', 'cc')
|
||||
# v8 doesn't like ccache
|
||||
if [ ! -z "`echo $CC | grep ccache`" ]; then
|
||||
echo "Error: V8 doesn't like ccache. Please set your CC env var to 'gcc'"
|
||||
echo " (ba)sh: export CC=gcc"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
root_dir = os.path.dirname(__file__)
|
||||
sys.path.insert(0, os.path.join(root_dir, 'deps', 'v8', 'tools'))
|
||||
if [ -z "$PYTHON" ]; then
|
||||
PYTHON=python
|
||||
fi
|
||||
|
||||
# parse our options
|
||||
parser = optparse.OptionParser()
|
||||
CUR_DIR=$PWD
|
||||
|
||||
parser.add_option("--debug",
|
||||
action="store_true",
|
||||
dest="debug",
|
||||
help="Also build debug build")
|
||||
#possible relative path
|
||||
WORKINGDIR=`dirname $0`
|
||||
cd "$WORKINGDIR"
|
||||
#abs path
|
||||
WORKINGDIR=`pwd`
|
||||
cd "$CUR_DIR"
|
||||
|
||||
parser.add_option("--prefix",
|
||||
action="store",
|
||||
dest="prefix",
|
||||
help="Select the install prefix (defaults to /usr/local)")
|
||||
"$PYTHON" "${WORKINGDIR}/tools/waf-light" --jobs=1 configure $*
|
||||
|
||||
parser.add_option("--without-npm",
|
||||
action="store_true",
|
||||
dest="without_npm",
|
||||
help="Don\'t install the bundled npm package manager")
|
||||
|
||||
parser.add_option("--without-waf",
|
||||
action="store_true",
|
||||
dest="without_waf",
|
||||
help="Don\'t install node-waf")
|
||||
|
||||
parser.add_option("--without-ssl",
|
||||
action="store_true",
|
||||
dest="without_ssl",
|
||||
help="Build without SSL")
|
||||
|
||||
parser.add_option("--without-snapshot",
|
||||
action="store_true",
|
||||
dest="without_snapshot",
|
||||
help="Build without snapshotting V8 libraries. You might want to set"
|
||||
" this for cross-compiling. [Default: False]")
|
||||
|
||||
parser.add_option("--shared-v8",
|
||||
action="store_true",
|
||||
dest="shared_v8",
|
||||
help="Link to a shared V8 DLL instead of static linking")
|
||||
|
||||
parser.add_option("--shared-v8-includes",
|
||||
action="store",
|
||||
dest="shared_v8_includes",
|
||||
help="Directory containing V8 header files")
|
||||
|
||||
parser.add_option("--shared-v8-libpath",
|
||||
action="store",
|
||||
dest="shared_v8_libpath",
|
||||
help="A directory to search for the shared V8 DLL")
|
||||
|
||||
parser.add_option("--shared-v8-libname",
|
||||
action="store",
|
||||
dest="shared_v8_libname",
|
||||
help="Alternative lib name to link to (default: 'v8')")
|
||||
|
||||
parser.add_option("--shared-openssl",
|
||||
action="store_true",
|
||||
dest="shared_openssl",
|
||||
help="Link to a shared OpenSSl DLL instead of static linking")
|
||||
|
||||
parser.add_option("--shared-openssl-includes",
|
||||
action="store",
|
||||
dest="shared_openssl_includes",
|
||||
help="Directory containing OpenSSL header files")
|
||||
|
||||
parser.add_option("--shared-openssl-libpath",
|
||||
action="store",
|
||||
dest="shared_openssl_libpath",
|
||||
help="A directory to search for the shared OpenSSL DLLs")
|
||||
|
||||
parser.add_option("--shared-openssl-libname",
|
||||
action="store",
|
||||
dest="shared_openssl_libname",
|
||||
help="Alternative lib name to link to (default: 'crypto,ssl')")
|
||||
|
||||
# deprecated
|
||||
parser.add_option("--openssl-use-sys",
|
||||
action="store_true",
|
||||
dest="shared_openssl",
|
||||
help=optparse.SUPPRESS_HELP)
|
||||
|
||||
# deprecated
|
||||
parser.add_option("--openssl-includes",
|
||||
action="store",
|
||||
dest="shared_openssl_includes",
|
||||
help=optparse.SUPPRESS_HELP)
|
||||
|
||||
# deprecated
|
||||
parser.add_option("--openssl-libpath",
|
||||
action="store",
|
||||
dest="shared_openssl_libpath",
|
||||
help=optparse.SUPPRESS_HELP)
|
||||
|
||||
parser.add_option("--no-ssl2",
|
||||
action="store_true",
|
||||
dest="no_ssl2",
|
||||
help="Disable OpenSSL v2")
|
||||
|
||||
parser.add_option("--shared-zlib",
|
||||
action="store_true",
|
||||
dest="shared_zlib",
|
||||
help="Link to a shared zlib DLL instead of static linking")
|
||||
|
||||
parser.add_option("--shared-zlib-includes",
|
||||
action="store",
|
||||
dest="shared_zlib_includes",
|
||||
help="Directory containing zlib header files")
|
||||
|
||||
parser.add_option("--shared-zlib-libpath",
|
||||
action="store",
|
||||
dest="shared_zlib_libpath",
|
||||
help="A directory to search for the shared zlib DLL")
|
||||
|
||||
parser.add_option("--shared-zlib-libname",
|
||||
action="store",
|
||||
dest="shared_zlib_libname",
|
||||
help="Alternative lib name to link to (default: 'z')")
|
||||
|
||||
parser.add_option("--with-dtrace",
|
||||
action="store_true",
|
||||
dest="with_dtrace",
|
||||
help="Build with DTrace (default is true on supported systems)")
|
||||
|
||||
parser.add_option("--without-dtrace",
|
||||
action="store_true",
|
||||
dest="without_dtrace",
|
||||
help="Build without DTrace")
|
||||
|
||||
parser.add_option("--with-etw",
|
||||
action="store_true",
|
||||
dest="with_etw",
|
||||
help="Build with ETW (default is true on Windows)")
|
||||
|
||||
parser.add_option("--without-etw",
|
||||
action="store_true",
|
||||
dest="without_etw",
|
||||
help="Build without ETW")
|
||||
|
||||
# CHECKME does this still work with recent releases of V8?
|
||||
parser.add_option("--gdb",
|
||||
action="store_true",
|
||||
dest="gdb",
|
||||
help="add gdb support")
|
||||
|
||||
parser.add_option("--dest-cpu",
|
||||
action="store",
|
||||
dest="dest_cpu",
|
||||
help="CPU architecture to build for. Valid values are: arm, ia32, x64")
|
||||
|
||||
parser.add_option("--dest-os",
|
||||
action="store",
|
||||
dest="dest_os",
|
||||
help="Operating system to build for. Valid values are: "
|
||||
"win, mac, solaris, freebsd, linux")
|
||||
|
||||
parser.add_option("--no-ifaddrs",
|
||||
action="store_true",
|
||||
dest="no_ifaddrs",
|
||||
help="Use on deprecated SunOS systems that do not support ifaddrs.h")
|
||||
|
||||
parser.add_option("--with-arm-float-abi",
|
||||
action="store",
|
||||
dest="arm_float_abi",
|
||||
help="Specifies which floating-point ABI to use. Valid values are: "
|
||||
"soft, softfp, hard")
|
||||
|
||||
# Using --unsafe-optimizations voids your warranty.
|
||||
parser.add_option("--unsafe-optimizations",
|
||||
action="store_true",
|
||||
dest="unsafe_optimizations",
|
||||
help=optparse.SUPPRESS_HELP)
|
||||
|
||||
parser.add_option("--tag",
|
||||
action="store",
|
||||
dest="tag",
|
||||
help="Custom build tag")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
|
||||
def b(value):
|
||||
"""Returns the string 'true' if value is truthy, 'false' otherwise."""
|
||||
if value:
|
||||
return 'true'
|
||||
else:
|
||||
return 'false'
|
||||
|
||||
|
||||
def pkg_config(pkg):
|
||||
cmd = os.popen('pkg-config --libs %s' % pkg, 'r')
|
||||
libs = cmd.readline().strip()
|
||||
ret = cmd.close()
|
||||
if (ret): return None
|
||||
|
||||
cmd = os.popen('pkg-config --cflags %s' % pkg, 'r')
|
||||
cflags = cmd.readline().strip()
|
||||
ret = cmd.close()
|
||||
if (ret): return None
|
||||
|
||||
return (libs, cflags)
|
||||
|
||||
|
||||
def cc_macros():
|
||||
"""Checks predefined macros using the CC command."""
|
||||
|
||||
try:
|
||||
p = subprocess.Popen(CC.split() + ['-dM', '-E', '-'],
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE)
|
||||
except OSError:
|
||||
print '''Node.js configure error: No acceptable C compiler found!
|
||||
|
||||
Please make sure you have a C compiler installed on your system and/or
|
||||
consider adjusting the CC environment variable if you installed
|
||||
it in a non-standard prefix.
|
||||
'''
|
||||
sys.exit()
|
||||
|
||||
p.stdin.write('\n')
|
||||
out = p.communicate()[0]
|
||||
|
||||
out = str(out).split('\n')
|
||||
|
||||
k = {}
|
||||
for line in out:
|
||||
import shlex
|
||||
lst = shlex.split(line)
|
||||
if len(lst) > 2:
|
||||
key = lst[1]
|
||||
val = lst[2]
|
||||
k[key] = val
|
||||
return k
|
||||
|
||||
|
||||
def is_arch_armv7():
|
||||
"""Check for ARMv7 instructions"""
|
||||
cc_macros_cache = cc_macros()
|
||||
return ('__ARM_ARCH_7__' in cc_macros_cache or
|
||||
'__ARM_ARCH_7A__' in cc_macros_cache or
|
||||
'__ARM_ARCH_7R__' in cc_macros_cache or
|
||||
'__ARM_ARCH_7M__' in cc_macros_cache)
|
||||
|
||||
|
||||
def arm_hard_float_abi():
|
||||
"""Check for hardfloat or softfloat eabi on ARM"""
|
||||
# GCC versions 4.6 and above define __ARM_PCS or __ARM_PCS_VFP to specify
|
||||
# the Floating Point ABI used (PCS stands for Procedure Call Standard).
|
||||
# We use these as well as a couple of other defines to statically determine
|
||||
# what FP ABI used.
|
||||
# GCC versions 4.4 and below don't support hard-fp.
|
||||
# GCC versions 4.5 may support hard-fp without defining __ARM_PCS or
|
||||
# __ARM_PCS_VFP.
|
||||
|
||||
if compiler_version() >= (4, 6, 0):
|
||||
return '__ARM_PCS_VFP' in cc_macros()
|
||||
elif compiler_version() < (4, 5, 0):
|
||||
return False
|
||||
elif '__ARM_PCS_VFP' in cc_macros():
|
||||
return True
|
||||
elif ('__ARM_PCS' in cc_macros() or
|
||||
'__SOFTFP' in cc_macros() or
|
||||
not '__VFP_FP__' in cc_macros()):
|
||||
return False
|
||||
else:
|
||||
print '''Node.js configure error: Your version of GCC does not report
|
||||
the Floating-Point ABI to compile for your hardware
|
||||
|
||||
Please manually specify which floating-point ABI to use with the
|
||||
--with-arm-float-abi option.
|
||||
'''
|
||||
sys.exit()
|
||||
|
||||
|
||||
def host_arch_cc():
|
||||
"""Host architecture check using the CC command."""
|
||||
|
||||
k = cc_macros()
|
||||
|
||||
matchup = {
|
||||
'__x86_64__' : 'x64',
|
||||
'__i386__' : 'ia32',
|
||||
'__arm__' : 'arm',
|
||||
}
|
||||
|
||||
rtn = 'ia32' # default
|
||||
|
||||
for i in matchup:
|
||||
if i in k and k[i] != '0':
|
||||
rtn = matchup[i]
|
||||
break
|
||||
|
||||
return rtn
|
||||
|
||||
|
||||
def host_arch_win():
|
||||
"""Host architecture check using environ vars (better way to do this?)"""
|
||||
|
||||
arch = os.environ.get('PROCESSOR_ARCHITECTURE', 'x86')
|
||||
|
||||
matchup = {
|
||||
'AMD64' : 'x64',
|
||||
'x86' : 'ia32',
|
||||
'arm' : 'arm',
|
||||
}
|
||||
|
||||
return matchup.get(arch, 'ia32')
|
||||
|
||||
|
||||
def compiler_version():
|
||||
try:
|
||||
proc = subprocess.Popen(CC.split() + ['--version'], stdout=subprocess.PIPE)
|
||||
except WindowsError:
|
||||
return (0, False)
|
||||
|
||||
is_clang = 'clang' in proc.communicate()[0].split('\n')[0]
|
||||
|
||||
proc = subprocess.Popen(CC.split() + ['-dumpversion'], stdout=subprocess.PIPE)
|
||||
version = tuple(map(int, proc.communicate()[0].split('.')))
|
||||
|
||||
return (version, is_clang)
|
||||
|
||||
|
||||
def configure_arm(o):
|
||||
# V8 on ARM requires that armv7 is set. CPU Model detected by
|
||||
# the presence of __ARM_ARCH_7__ and the like defines in compiler
|
||||
if options.arm_float_abi:
|
||||
hard_float = options.arm_float_abi == 'hard'
|
||||
else:
|
||||
hard_float = arm_hard_float_abi()
|
||||
o['variables']['v8_use_arm_eabi_hardfloat'] = b(hard_float)
|
||||
|
||||
armv7 = is_arch_armv7()
|
||||
if armv7:
|
||||
# CHECKME VFPv3 implies ARMv7+ but is the reverse true as well?
|
||||
o['variables']['arm_fpu'] = 'vfpv3'
|
||||
o['variables']['arm_neon'] = 0
|
||||
o['variables']['armv7'] = int(armv7)
|
||||
|
||||
|
||||
def configure_node(o):
|
||||
# TODO add gdb
|
||||
o['variables']['v8_no_strict_aliasing'] = 1 # work around compiler bugs
|
||||
o['variables']['node_prefix'] = os.path.expanduser(options.prefix or '')
|
||||
o['variables']['node_install_npm'] = b(not options.without_npm)
|
||||
o['variables']['node_install_waf'] = b(not options.without_waf)
|
||||
o['variables']['node_unsafe_optimizations'] = (
|
||||
1 if options.unsafe_optimizations else 0)
|
||||
o['default_configuration'] = 'Debug' if options.debug else 'Release'
|
||||
|
||||
host_arch = host_arch_win() if os.name == 'nt' else host_arch_cc()
|
||||
target_arch = options.dest_cpu or host_arch
|
||||
o['variables']['host_arch'] = host_arch
|
||||
o['variables']['target_arch'] = target_arch
|
||||
|
||||
if target_arch == 'arm':
|
||||
configure_arm(o)
|
||||
|
||||
cc_version, is_clang = compiler_version()
|
||||
o['variables']['clang'] = 1 if is_clang else 0
|
||||
|
||||
if not is_clang and cc_version != 0:
|
||||
o['variables']['gcc_version'] = 10 * cc_version[0] + cc_version[1]
|
||||
|
||||
# clang has always supported -fvisibility=hidden, right?
|
||||
if not is_clang and cc_version < (4,0,0):
|
||||
o['variables']['visibility'] = ''
|
||||
|
||||
# By default, enable DTrace on SunOS systems. Don't allow it on other
|
||||
# systems, since it won't work. (The MacOS build process is different than
|
||||
# SunOS, and we haven't implemented it.)
|
||||
if sys.platform.startswith('sunos'):
|
||||
o['variables']['node_use_dtrace'] = b(not options.without_dtrace)
|
||||
elif b(options.with_dtrace) == 'true':
|
||||
raise Exception('DTrace is currently only supported on SunOS systems.')
|
||||
else:
|
||||
o['variables']['node_use_dtrace'] = 'false'
|
||||
|
||||
if options.no_ifaddrs:
|
||||
o['defines'] += ['SUNOS_NO_IFADDRS']
|
||||
|
||||
# By default, enable ETW on Windows.
|
||||
if sys.platform.startswith('win32'):
|
||||
o['variables']['node_use_etw'] = b(not options.without_etw);
|
||||
elif b(options.with_etw) == 'true':
|
||||
raise Exception('ETW is only supported on Windows.')
|
||||
else:
|
||||
o['variables']['node_use_etw'] = 'false'
|
||||
|
||||
if options.tag:
|
||||
o['variables']['node_tag'] = '-' + options.tag
|
||||
else:
|
||||
o['variables']['node_tag'] = ''
|
||||
|
||||
|
||||
def configure_libz(o):
|
||||
o['variables']['node_shared_zlib'] = b(options.shared_zlib)
|
||||
|
||||
# assume shared_zlib if one of these is set?
|
||||
if options.shared_zlib_libpath:
|
||||
o['libraries'] += ['-L%s' % options.shared_zlib_libpath]
|
||||
if options.shared_zlib_libname:
|
||||
o['libraries'] += ['-l%s' % options.shared_zlib_libname]
|
||||
elif options.shared_zlib:
|
||||
o['libraries'] += ['-lz']
|
||||
if options.shared_zlib_includes:
|
||||
o['include_dirs'] += [options.shared_zlib_includes]
|
||||
|
||||
|
||||
def configure_v8(o):
|
||||
o['variables']['v8_use_snapshot'] = b(not options.without_snapshot)
|
||||
o['variables']['node_shared_v8'] = b(options.shared_v8)
|
||||
|
||||
# assume shared_v8 if one of these is set?
|
||||
if options.shared_v8_libpath:
|
||||
o['libraries'] += ['-L%s' % options.shared_v8_libpath]
|
||||
if options.shared_v8_libname:
|
||||
o['libraries'] += ['-l%s' % options.shared_v8_libname]
|
||||
elif options.shared_v8:
|
||||
o['libraries'] += ['-lv8']
|
||||
if options.shared_v8_includes:
|
||||
o['include_dirs'] += [options.shared_v8_includes]
|
||||
|
||||
|
||||
def configure_openssl(o):
|
||||
o['variables']['node_use_openssl'] = b(not options.without_ssl)
|
||||
o['variables']['node_shared_openssl'] = b(options.shared_openssl)
|
||||
|
||||
if options.without_ssl:
|
||||
return
|
||||
|
||||
if options.no_ssl2:
|
||||
o['defines'] += ['OPENSSL_NO_SSL2=1']
|
||||
|
||||
if options.shared_openssl:
|
||||
(libs, cflags) = pkg_config('openssl') or ('-lssl -lcrypto', '')
|
||||
|
||||
if options.shared_openssl_libpath:
|
||||
o['libraries'] += ['-L%s' % options.shared_openssl_libpath]
|
||||
|
||||
if options.shared_openssl_libname:
|
||||
libnames = options.shared_openssl_libname.split(',')
|
||||
o['libraries'] += ['-l%s' % s for s in libnames]
|
||||
else:
|
||||
o['libraries'] += libs.split()
|
||||
|
||||
if options.shared_openssl_includes:
|
||||
o['include_dirs'] += [options.shared_openssl_includes]
|
||||
else:
|
||||
o['cflags'] += cflags.split()
|
||||
|
||||
|
||||
output = {
|
||||
'variables': {},
|
||||
'include_dirs': [],
|
||||
'libraries': [],
|
||||
'defines': [],
|
||||
'cflags': [],
|
||||
}
|
||||
|
||||
configure_node(output)
|
||||
configure_libz(output)
|
||||
configure_v8(output)
|
||||
configure_openssl(output)
|
||||
|
||||
# variables should be a root level element,
|
||||
# move everything else to target_defaults
|
||||
variables = output['variables']
|
||||
del output['variables']
|
||||
output = {
|
||||
'variables': variables,
|
||||
'target_defaults': output
|
||||
}
|
||||
pprint.pprint(output, indent=2)
|
||||
|
||||
def write(filename, data):
|
||||
filename = os.path.join(root_dir, filename)
|
||||
print "creating ", filename
|
||||
f = open(filename, 'w+')
|
||||
f.write(data)
|
||||
|
||||
write('config.gypi', "# Do not edit. Generated by the configure script.\n" +
|
||||
pprint.pformat(output, indent=2) + "\n")
|
||||
|
||||
write('config.mk', "# Do not edit. Generated by the configure script.\n" +
|
||||
("BUILDTYPE=%s\n" % ('Debug' if options.debug else 'Release')))
|
||||
|
||||
if os.name == 'nt':
|
||||
gyp_args = ['-f', 'msvs', '-G', 'msvs_version=2010']
|
||||
elif options.dest_os:
|
||||
gyp_args = ['-f', 'make-' + options.dest_os]
|
||||
else:
|
||||
gyp_args = ['-f', 'make']
|
||||
|
||||
subprocess.call([sys.executable, 'tools/gyp_node'] + gyp_args)
|
||||
exit $?
|
||||
|
||||
247
configure-gyp
Executable file
247
configure-gyp
Executable file
@@ -0,0 +1,247 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import optparse
|
||||
import os
|
||||
import json
|
||||
import sys
|
||||
|
||||
root_dir = os.path.dirname(__file__)
|
||||
sys.path.insert(0, os.path.join(root_dir, 'deps', 'v8', 'tools'))
|
||||
import utils # GuessArchitecture
|
||||
|
||||
# parse our options
|
||||
parser = optparse.OptionParser()
|
||||
|
||||
parser.add_option("--debug",
|
||||
action="store_true",
|
||||
dest="debug",
|
||||
help="Also build debug build")
|
||||
|
||||
parser.add_option("--prefix",
|
||||
action="store",
|
||||
dest="prefix",
|
||||
help="Select the install prefix (defaults to /usr/local)")
|
||||
|
||||
parser.add_option("--without-ssl",
|
||||
action="store_true",
|
||||
dest="without_ssl",
|
||||
help="Build without SSL")
|
||||
|
||||
parser.add_option("--without-snapshot",
|
||||
action="store_true",
|
||||
dest="without_snapshot",
|
||||
help="Build without snapshotting V8 libraries. You might want to set"
|
||||
" this for cross-compiling. [Default: False]")
|
||||
|
||||
parser.add_option("--shared-v8",
|
||||
action="store_true",
|
||||
dest="shared_v8",
|
||||
help="Link to a shared V8 DLL instead of static linking")
|
||||
|
||||
parser.add_option("--shared-v8-includes",
|
||||
action="store",
|
||||
dest="shared_v8_includes",
|
||||
help="Directory containing V8 header files")
|
||||
|
||||
parser.add_option("--shared-v8-libpath",
|
||||
action="store",
|
||||
dest="shared_v8_libpath",
|
||||
help="A directory to search for the shared V8 DLL")
|
||||
|
||||
parser.add_option("--shared-v8-libname",
|
||||
action="store",
|
||||
dest="shared_v8_libname",
|
||||
help="Alternative lib name to link to (default: 'v8')")
|
||||
|
||||
parser.add_option("--openssl-includes",
|
||||
action="store",
|
||||
dest="openssl_includes",
|
||||
help="A directory to search for the OpenSSL includes")
|
||||
|
||||
parser.add_option("--openssl-libpath",
|
||||
action="store",
|
||||
dest="openssl_libpath",
|
||||
help="A directory to search for the OpenSSL libraries")
|
||||
|
||||
parser.add_option("--no-ssl2",
|
||||
action="store_true",
|
||||
dest="no_ssl2",
|
||||
help="Disable OpenSSL v2")
|
||||
|
||||
parser.add_option("--shared-cares",
|
||||
action="store_true",
|
||||
dest="shared_cares",
|
||||
help="Link to a shared C-Ares DLL instead of static linking")
|
||||
|
||||
parser.add_option("--shared-cares-includes",
|
||||
action="store",
|
||||
dest="shared_cares_includes",
|
||||
help="Directory containing C-Ares header files")
|
||||
|
||||
parser.add_option("--shared-cares-libpath",
|
||||
action="store",
|
||||
dest="shared_cares_libpath",
|
||||
help="A directory to search for the shared C-Ares DLL")
|
||||
|
||||
parser.add_option("--with-dtrace",
|
||||
action="store_true",
|
||||
dest="with_dtrace",
|
||||
help="Build with DTrace (experimental)")
|
||||
|
||||
# CHECKME does this still work with recent releases of V8?
|
||||
parser.add_option("--gdb",
|
||||
action="store_true",
|
||||
dest="gdb",
|
||||
help="add gdb support")
|
||||
|
||||
parser.add_option("--dest-cpu",
|
||||
action="store",
|
||||
dest="dest_cpu",
|
||||
help="CPU architecture to build for. Valid values are: arm, ia32, x64")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
|
||||
def pkg_config(pkg):
|
||||
cmd = os.popen('pkg-config --libs %s' % pkg, 'r')
|
||||
libs = cmd.readline().strip()
|
||||
ret = cmd.close()
|
||||
if (ret): return None
|
||||
|
||||
cmd = os.popen('pkg-config --cflags %s' % pkg, 'r')
|
||||
cflags = cmd.readline().strip()
|
||||
ret = cmd.close()
|
||||
if (ret): return None
|
||||
|
||||
return (libs, cflags)
|
||||
|
||||
|
||||
def uname(switch):
|
||||
f = os.popen('uname %s' % switch)
|
||||
s = f.read().strip()
|
||||
f.close()
|
||||
return s
|
||||
|
||||
|
||||
def host_arch():
|
||||
"""Host architecture. One of arm, ia32 or x64."""
|
||||
arch = uname('-p')
|
||||
|
||||
if arch == 'unknown':
|
||||
arch = uname('-m')
|
||||
|
||||
return {
|
||||
'arm': 'arm',
|
||||
'x86': 'ia32',
|
||||
'i386': 'ia32',
|
||||
'x86_64': 'x64',
|
||||
}.get(arch, 'ia32')
|
||||
|
||||
|
||||
def target_arch():
|
||||
# TODO act on options.dest_cpu
|
||||
return host_arch()
|
||||
|
||||
|
||||
def configure_node(o):
|
||||
# TODO add gdb and dest_cpu
|
||||
o['variables']['node_debug'] = 'true' if options.debug else 'false'
|
||||
o['variables']['node_prefix'] = options.prefix if options.prefix else ''
|
||||
o['variables']['node_use_dtrace'] = 'true' if options.with_dtrace else 'false'
|
||||
o['variables']['host_arch'] = host_arch()
|
||||
o['variables']['target_arch'] = target_arch()
|
||||
|
||||
# TODO move to node.gyp
|
||||
if sys.platform == 'sunos5':
|
||||
o['variables']['visibility'] = '' # FIXME -fvisibility=hidden, should be a gcc check
|
||||
|
||||
|
||||
def configure_libz(o):
|
||||
o['libraries'] += ['-lz']
|
||||
|
||||
|
||||
def configure_v8(o):
|
||||
o['variables']['v8_use_snapshot'] = 'true' if not options.without_snapshot else 'false'
|
||||
o['variables']['node_shared_v8'] = 'true' if options.shared_v8 else 'false'
|
||||
|
||||
# assume shared_v8 if one of these is set?
|
||||
if options.shared_v8_libpath:
|
||||
o['libraries'] += ['-L%s' % options.shared_v8_libpath]
|
||||
if options.shared_v8_libname:
|
||||
o['libraries'] += ['-l%s' % options.shared_v8_libname]
|
||||
if options.shared_v8_includes:
|
||||
o['include_dirs'] += [options.shared_v8_includes]
|
||||
|
||||
|
||||
def configure_cares(o):
|
||||
o['variables']['node_shared_cares'] = 'true' if options.shared_cares else 'false'
|
||||
|
||||
# assume shared_cares if one of these is set?
|
||||
if options.shared_cares_libpath:
|
||||
o['libraries'] += ['-L%s' % options.shared_cares_libpath]
|
||||
if options.shared_cares_includes:
|
||||
o['include_dirs'] += [options.shared_cares_includes]
|
||||
|
||||
|
||||
def configure_openssl(o):
|
||||
o['variables']['node_use_openssl'] = 'false' if options.without_ssl else 'true'
|
||||
|
||||
if options.without_ssl:
|
||||
return
|
||||
|
||||
if options.no_ssl2:
|
||||
o['defines'] += ['OPENSSL_NO_SSL2=1']
|
||||
|
||||
out = pkg_config('openssl')
|
||||
(libs, cflags) = out if out else ('', '')
|
||||
|
||||
if options.openssl_libpath:
|
||||
o['libraries'] += ['-L%s' % options.openssl_libpath, '-lssl', '-lcrypto']
|
||||
else:
|
||||
o['libraries'] += libs.split()
|
||||
|
||||
if options.openssl_includes:
|
||||
o['include_dirs'] += [options.openssl_includes]
|
||||
else:
|
||||
o['cflags'] += cflags.split()
|
||||
|
||||
if libs or cflags or options.openssl_libpath or options.openssl_includes:
|
||||
o['variables']['node_use_system_openssl'] = 'true'
|
||||
else:
|
||||
o['variables']['node_use_system_openssl'] = 'false'
|
||||
|
||||
|
||||
print "configure options:", options
|
||||
|
||||
output = {
|
||||
'variables': {},
|
||||
'include_dirs': [],
|
||||
'libraries': [],
|
||||
'defines': [],
|
||||
'cflags': [],
|
||||
}
|
||||
|
||||
configure_node(output)
|
||||
configure_libz(output)
|
||||
configure_v8(output)
|
||||
configure_cares(output)
|
||||
configure_openssl(output)
|
||||
|
||||
# variables should be a root level element,
|
||||
# move everything else to target_defaults
|
||||
variables = output['variables']
|
||||
del output['variables']
|
||||
output = {
|
||||
'variables': variables,
|
||||
'target_defaults': output
|
||||
}
|
||||
|
||||
fn = os.path.join(root_dir, 'options.gypi')
|
||||
print "creating ", fn
|
||||
|
||||
f = open(fn, 'w+')
|
||||
f.write("# Do not edit. Generated by the configure script.\n")
|
||||
json.dump(output, f, indent=2, skipkeys=True)
|
||||
f.write("\n")
|
||||
f.close()
|
||||
|
||||
3
deps/http_parser/.gitignore
vendored
3
deps/http_parser/.gitignore
vendored
@@ -1,8 +1,5 @@
|
||||
core
|
||||
tags
|
||||
*.o
|
||||
test
|
||||
test_g
|
||||
test_fast
|
||||
*.mk
|
||||
*.Makefile
|
||||
|
||||
4
deps/http_parser/.mailmap
vendored
4
deps/http_parser/.mailmap
vendored
@@ -1,4 +0,0 @@
|
||||
# update AUTHORS with:
|
||||
# git log --all --reverse --format='%aN <%aE>' | perl -ne 'BEGIN{print "# Authors ordered by first contribution.\n"} print unless $h{$_}; $h{$_} = 1' > AUTHORS
|
||||
Ryan Dahl <ry@tinyclouds.org>
|
||||
Salman Haq <salman.haq@asti-usa.com>
|
||||
32
deps/http_parser/AUTHORS
vendored
32
deps/http_parser/AUTHORS
vendored
@@ -1,32 +0,0 @@
|
||||
# Authors ordered by first contribution.
|
||||
Ryan Dahl <ry@tinyclouds.org>
|
||||
Jeremy Hinegardner <jeremy@hinegardner.org>
|
||||
Sergey Shepelev <temotor@gmail.com>
|
||||
Joe Damato <ice799@gmail.com>
|
||||
tomika <tomika_nospam@freemail.hu>
|
||||
Phoenix Sol <phoenix@burninglabs.com>
|
||||
Cliff Frey <cliff@meraki.com>
|
||||
Ewen Cheslack-Postava <ewencp@cs.stanford.edu>
|
||||
Santiago Gala <sgala@apache.org>
|
||||
Tim Becker <tim.becker@syngenio.de>
|
||||
Jeff Terrace <jterrace@gmail.com>
|
||||
Ben Noordhuis <info@bnoordhuis.nl>
|
||||
Nathan Rajlich <nathan@tootallnate.net>
|
||||
Mark Nottingham <mnot@mnot.net>
|
||||
Aman Gupta <aman@tmm1.net>
|
||||
Tim Becker <tim.becker@kuriositaet.de>
|
||||
Sean Cunningham <sean.cunningham@mandiant.com>
|
||||
Peter Griess <pg@std.in>
|
||||
Salman Haq <salman.haq@asti-usa.com>
|
||||
Cliff Frey <clifffrey@gmail.com>
|
||||
Jon Kolb <jon@b0g.us>
|
||||
Fouad Mardini <f.mardini@gmail.com>
|
||||
Paul Querna <pquerna@apache.org>
|
||||
Felix Geisendörfer <felix@debuggable.com>
|
||||
koichik <koichik@improvement.jp>
|
||||
Andre Caron <andre.l.caron@gmail.com>
|
||||
Ivo Raisr <ivosh@ivosh.net>
|
||||
James McLaughlin <jamie@lacewing-project.org>
|
||||
David Gwynne <loki@animata.net>
|
||||
LE ROUX Thomas <thomas@procheo.fr>
|
||||
Randy Rizun <rrizun@ortivawireless.com>
|
||||
10
deps/http_parser/Makefile
vendored
10
deps/http_parser/Makefile
vendored
@@ -10,7 +10,7 @@ CPPFLAGS_FAST += $(CPPFLAGS_FAST_EXTRA)
|
||||
CFLAGS += -Wall -Wextra -Werror
|
||||
CFLAGS_DEBUG = $(CFLAGS) -O0 -g $(CFLAGS_DEBUG_EXTRA)
|
||||
CFLAGS_FAST = $(CFLAGS) -O3 $(CFLAGS_FAST_EXTRA)
|
||||
CFLAGS_LIB = $(CFLAGS_FAST) -fPIC
|
||||
|
||||
|
||||
test: test_g test_fast
|
||||
./test_g
|
||||
@@ -40,12 +40,6 @@ test-run-timed: test_fast
|
||||
test-valgrind: test_g
|
||||
valgrind ./test_g
|
||||
|
||||
libhttp_parser.o: http_parser.c http_parser.h Makefile
|
||||
$(CC) $(CPPFLAGS_FAST) $(CFLAGS_LIB) -c http_parser.c -o libhttp_parser.o
|
||||
|
||||
library: libhttp_parser.o
|
||||
$(CC) -shared -o libhttp_parser.so libhttp_parser.o
|
||||
|
||||
package: http_parser.o
|
||||
$(AR) rcs libhttp_parser.a http_parser.o
|
||||
|
||||
@@ -53,6 +47,6 @@ tags: http_parser.c http_parser.h test.c
|
||||
ctags $^
|
||||
|
||||
clean:
|
||||
rm -f *.o *.a test test_fast test_g http_parser.tar tags libhttp_parser.so libhttp_parser.o
|
||||
rm -f *.o *.a test test_fast test_g http_parser.tar tags
|
||||
|
||||
.PHONY: clean package test-run test-run-timed test-valgrind
|
||||
|
||||
11
deps/http_parser/README.md
vendored
11
deps/http_parser/README.md
vendored
@@ -164,15 +164,8 @@ and apply following logic:
|
||||
------------------------ ------------ --------------------------------------------
|
||||
|
||||
|
||||
Parsing URLs
|
||||
------------
|
||||
|
||||
A simplistic zero-copy URL parser is provided as `http_parser_parse_url()`.
|
||||
Users of this library may wish to use it to parse URLs constructed from
|
||||
consecutive `on_url` callbacks.
|
||||
|
||||
See examples of reading in headers:
|
||||
|
||||
* [partial example](http://gist.github.com/155877) in C
|
||||
* [from http-parser tests](http://github.com/joyent/http-parser/blob/37a0ff8/test.c#L403) in C
|
||||
* [from Node library](http://github.com/joyent/node/blob/842eaf4/src/http.js#L284) in Javascript
|
||||
* [from http-parser tests](http://github.com/ry/http-parser/blob/37a0ff8928fb0d83cec0d0d8909c5a4abcd221af/test.c#L403) in C
|
||||
* [from Node library](http://github.com/ry/node/blob/842eaf446d2fdcb33b296c67c911c32a0dabc747/src/http.js#L284) in Javascript
|
||||
|
||||
1383
deps/http_parser/http_parser.c
vendored
1383
deps/http_parser/http_parser.c
vendored
File diff suppressed because it is too large
Load Diff
124
deps/http_parser/http_parser.h
vendored
124
deps/http_parser/http_parser.h
vendored
@@ -65,6 +65,7 @@ typedef int ssize_t;
|
||||
|
||||
typedef struct http_parser http_parser;
|
||||
typedef struct http_parser_settings http_parser_settings;
|
||||
typedef struct http_parser_result http_parser_result;
|
||||
|
||||
|
||||
/* Callbacks should return non-zero to indicate an error. The parser will
|
||||
@@ -85,44 +86,36 @@ typedef int (*http_cb) (http_parser*);
|
||||
|
||||
|
||||
/* Request Methods */
|
||||
#define HTTP_METHOD_MAP(XX) \
|
||||
XX(0, DELETE, DELETE) \
|
||||
XX(1, GET, GET) \
|
||||
XX(2, HEAD, HEAD) \
|
||||
XX(3, POST, POST) \
|
||||
XX(4, PUT, PUT) \
|
||||
/* pathological */ \
|
||||
XX(5, CONNECT, CONNECT) \
|
||||
XX(6, OPTIONS, OPTIONS) \
|
||||
XX(7, TRACE, TRACE) \
|
||||
/* webdav */ \
|
||||
XX(8, COPY, COPY) \
|
||||
XX(9, LOCK, LOCK) \
|
||||
XX(10, MKCOL, MKCOL) \
|
||||
XX(11, MOVE, MOVE) \
|
||||
XX(12, PROPFIND, PROPFIND) \
|
||||
XX(13, PROPPATCH, PROPPATCH) \
|
||||
XX(14, SEARCH, SEARCH) \
|
||||
XX(15, UNLOCK, UNLOCK) \
|
||||
/* subversion */ \
|
||||
XX(16, REPORT, REPORT) \
|
||||
XX(17, MKACTIVITY, MKACTIVITY) \
|
||||
XX(18, CHECKOUT, CHECKOUT) \
|
||||
XX(19, MERGE, MERGE) \
|
||||
/* upnp */ \
|
||||
XX(20, MSEARCH, M-SEARCH) \
|
||||
XX(21, NOTIFY, NOTIFY) \
|
||||
XX(22, SUBSCRIBE, SUBSCRIBE) \
|
||||
XX(23, UNSUBSCRIBE, UNSUBSCRIBE) \
|
||||
/* RFC-5789 */ \
|
||||
XX(24, PATCH, PATCH) \
|
||||
XX(25, PURGE, PURGE) \
|
||||
|
||||
enum http_method
|
||||
{
|
||||
#define XX(num, name, string) HTTP_##name = num,
|
||||
HTTP_METHOD_MAP(XX)
|
||||
#undef XX
|
||||
{ HTTP_DELETE = 0
|
||||
, HTTP_GET
|
||||
, HTTP_HEAD
|
||||
, HTTP_POST
|
||||
, HTTP_PUT
|
||||
/* pathological */
|
||||
, HTTP_CONNECT
|
||||
, HTTP_OPTIONS
|
||||
, HTTP_TRACE
|
||||
/* webdav */
|
||||
, HTTP_COPY
|
||||
, HTTP_LOCK
|
||||
, HTTP_MKCOL
|
||||
, HTTP_MOVE
|
||||
, HTTP_PROPFIND
|
||||
, HTTP_PROPPATCH
|
||||
, HTTP_UNLOCK
|
||||
/* subversion */
|
||||
, HTTP_REPORT
|
||||
, HTTP_MKACTIVITY
|
||||
, HTTP_CHECKOUT
|
||||
, HTTP_MERGE
|
||||
/* upnp */
|
||||
, HTTP_MSEARCH
|
||||
, HTTP_NOTIFY
|
||||
, HTTP_SUBSCRIBE
|
||||
, HTTP_UNSUBSCRIBE
|
||||
/* RFC-5789 */
|
||||
, HTTP_PATCH
|
||||
};
|
||||
|
||||
|
||||
@@ -150,7 +143,10 @@ enum flags
|
||||
\
|
||||
/* Callback-related errors */ \
|
||||
XX(CB_message_begin, "the on_message_begin callback failed") \
|
||||
XX(CB_path, "the on_path callback failed") \
|
||||
XX(CB_query_string, "the on_query_string callback failed") \
|
||||
XX(CB_url, "the on_url callback failed") \
|
||||
XX(CB_fragment, "the on_fragment callback failed") \
|
||||
XX(CB_header_field, "the on_header_field callback failed") \
|
||||
XX(CB_header_value, "the on_header_value callback failed") \
|
||||
XX(CB_headers_complete, "the on_headers_complete callback failed") \
|
||||
@@ -181,7 +177,6 @@ enum flags
|
||||
XX(INVALID_CONSTANT, "invalid constant string") \
|
||||
XX(INVALID_INTERNAL_STATE, "encountered unexpected internal state")\
|
||||
XX(STRICT, "strict mode assertion failed") \
|
||||
XX(PAUSED, "parser is paused") \
|
||||
XX(UNKNOWN, "an unknown error occurred")
|
||||
|
||||
|
||||
@@ -206,20 +201,20 @@ enum http_errno {
|
||||
|
||||
struct http_parser {
|
||||
/** PRIVATE **/
|
||||
unsigned char type : 2; /* enum http_parser_type */
|
||||
unsigned char flags : 6; /* F_* values from 'flags' enum; semi-public */
|
||||
unsigned char state; /* enum state from http_parser.c */
|
||||
unsigned char header_state; /* enum header_state from http_parser.c */
|
||||
unsigned char index; /* index into current matcher */
|
||||
unsigned char type : 2;
|
||||
unsigned char flags : 6; /* F_* values from 'flags' enum; semi-public */
|
||||
unsigned char state;
|
||||
unsigned char header_state;
|
||||
unsigned char index;
|
||||
|
||||
uint32_t nread; /* # bytes read in various scenarios */
|
||||
uint64_t content_length; /* # bytes in body (0 if no Content-Length header) */
|
||||
uint32_t nread;
|
||||
int64_t content_length;
|
||||
|
||||
/** READ-ONLY **/
|
||||
unsigned short http_major;
|
||||
unsigned short http_minor;
|
||||
unsigned short status_code; /* responses only */
|
||||
unsigned char method; /* requests only */
|
||||
unsigned char method; /* requests only */
|
||||
unsigned char http_errno : 7;
|
||||
|
||||
/* 1 = Upgrade header was present and the parser has exited because of that.
|
||||
@@ -249,35 +244,6 @@ struct http_parser_settings {
|
||||
};
|
||||
|
||||
|
||||
enum http_parser_url_fields
|
||||
{ UF_SCHEMA = 0
|
||||
, UF_HOST = 1
|
||||
, UF_PORT = 2
|
||||
, UF_PATH = 3
|
||||
, UF_QUERY = 4
|
||||
, UF_FRAGMENT = 5
|
||||
, UF_MAX = 6
|
||||
};
|
||||
|
||||
|
||||
/* Result structure for http_parser_parse_url().
|
||||
*
|
||||
* Callers should index into field_data[] with UF_* values iff field_set
|
||||
* has the relevant (1 << UF_*) bit set. As a courtesy to clients (and
|
||||
* because we probably have padding left over), we convert any port to
|
||||
* a uint16_t.
|
||||
*/
|
||||
struct http_parser_url {
|
||||
uint16_t field_set; /* Bitmask of (1 << UF_*) values */
|
||||
uint16_t port; /* Converted UF_PORT string */
|
||||
|
||||
struct {
|
||||
uint16_t off; /* Offset into buffer in which field starts */
|
||||
uint16_t len; /* Length of run in buffer */
|
||||
} field_data[UF_MAX];
|
||||
};
|
||||
|
||||
|
||||
void http_parser_init(http_parser *parser, enum http_parser_type type);
|
||||
|
||||
|
||||
@@ -304,14 +270,6 @@ const char *http_errno_name(enum http_errno err);
|
||||
/* Return a string description of the given error */
|
||||
const char *http_errno_description(enum http_errno err);
|
||||
|
||||
/* Parse a URL; return nonzero on failure */
|
||||
int http_parser_parse_url(const char *buf, size_t buflen,
|
||||
int is_connect,
|
||||
struct http_parser_url *u);
|
||||
|
||||
/* Pause or un-pause the parser; a nonzero value pauses */
|
||||
void http_parser_pause(http_parser *parser, int paused);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
100
deps/http_parser/test.c
vendored
100
deps/http_parser/test.c
vendored
@@ -680,6 +680,56 @@ const struct message requests[] =
|
||||
,.body= ""
|
||||
}
|
||||
|
||||
/* see https://github.com/ry/http-parser/issues/47 */
|
||||
#define EAT_TRAILING_CRLF_NO_CONNECTION_CLOSE 28
|
||||
, {.name = "eat CRLF between requests, no \"Connection: close\" header"
|
||||
,.raw= "POST / HTTP/1.1\r\n"
|
||||
"Host: www.example.com\r\n"
|
||||
"Content-Type: application/x-www-form-urlencoded\r\n"
|
||||
"Content-Length: 4\r\n"
|
||||
"\r\n"
|
||||
"q=42\r\n" /* note the trailing CRLF */
|
||||
,.should_keep_alive= TRUE
|
||||
,.message_complete_on_eof= FALSE
|
||||
,.http_major= 1
|
||||
,.http_minor= 1
|
||||
,.method= HTTP_POST
|
||||
,.request_url= "/"
|
||||
,.num_headers= 3
|
||||
,.upgrade= 0
|
||||
,.headers= { { "Host", "www.example.com" }
|
||||
, { "Content-Type", "application/x-www-form-urlencoded" }
|
||||
, { "Content-Length", "4" }
|
||||
}
|
||||
,.body= "q=42"
|
||||
}
|
||||
|
||||
/* see https://github.com/ry/http-parser/issues/47 */
|
||||
#define EAT_TRAILING_CRLF_WITH_CONNECTION_CLOSE 29
|
||||
, {.name = "eat CRLF between requests even if \"Connection: close\" is set"
|
||||
,.raw= "POST / HTTP/1.1\r\n"
|
||||
"Host: www.example.com\r\n"
|
||||
"Content-Type: application/x-www-form-urlencoded\r\n"
|
||||
"Content-Length: 4\r\n"
|
||||
"Connection: close\r\n"
|
||||
"\r\n"
|
||||
"q=42\r\n" /* note the trailing CRLF */
|
||||
,.should_keep_alive= FALSE
|
||||
,.message_complete_on_eof= FALSE /* input buffer isn't empty when on_message_complete is called */
|
||||
,.http_major= 1
|
||||
,.http_minor= 1
|
||||
,.method= HTTP_POST
|
||||
,.request_url= "/"
|
||||
,.num_headers= 4
|
||||
,.upgrade= 0
|
||||
,.headers= { { "Host", "www.example.com" }
|
||||
, { "Content-Type", "application/x-www-form-urlencoded" }
|
||||
, { "Content-Length", "4" }
|
||||
, { "Connection", "close" }
|
||||
}
|
||||
,.body= "q=42"
|
||||
}
|
||||
|
||||
, {.name= NULL } /* sentinel */
|
||||
};
|
||||
|
||||
@@ -780,8 +830,8 @@ const struct message responses[] =
|
||||
, {.name= "404 no headers no body"
|
||||
,.type= HTTP_RESPONSE
|
||||
,.raw= "HTTP/1.1 404 Not Found\r\n\r\n"
|
||||
,.should_keep_alive= TRUE
|
||||
,.message_complete_on_eof= FALSE
|
||||
,.should_keep_alive= FALSE
|
||||
,.message_complete_on_eof= TRUE
|
||||
,.http_major= 1
|
||||
,.http_minor= 1
|
||||
,.status_code= 404
|
||||
@@ -795,8 +845,8 @@ const struct message responses[] =
|
||||
, {.name= "301 no response phrase"
|
||||
,.type= HTTP_RESPONSE
|
||||
,.raw= "HTTP/1.1 301\r\n\r\n"
|
||||
,.should_keep_alive = TRUE
|
||||
,.message_complete_on_eof= FALSE
|
||||
,.should_keep_alive = FALSE
|
||||
,.message_complete_on_eof= TRUE
|
||||
,.http_major= 1
|
||||
,.http_minor= 1
|
||||
,.status_code= 301
|
||||
@@ -1057,8 +1107,46 @@ const struct message responses[] =
|
||||
{}
|
||||
,.body= ""
|
||||
}
|
||||
, {.name= NULL } /* sentinel */
|
||||
|
||||
#define NO_CONTENT_LENGTH_NO_TRANSFER_ENCODING_RESPONSE 13
|
||||
/* The client should wait for the server's EOF. That is, when neither
|
||||
* content-length nor transfer-encoding is specified, the end of body
|
||||
* is specified by the EOF.
|
||||
*/
|
||||
, {.name= "neither content-length nor transfer-encoding response"
|
||||
,.type= HTTP_RESPONSE
|
||||
,.raw= "HTTP/1.1 200 OK\r\n"
|
||||
"Content-Type: text/plain\r\n"
|
||||
"\r\n"
|
||||
"hello world"
|
||||
,.should_keep_alive= FALSE
|
||||
,.message_complete_on_eof= TRUE
|
||||
,.http_major= 1
|
||||
,.http_minor= 1
|
||||
,.status_code= 200
|
||||
,.num_headers= 1
|
||||
,.headers=
|
||||
{ { "Content-Type", "text/plain" }
|
||||
}
|
||||
,.body= "hello world"
|
||||
}
|
||||
|
||||
#define NO_HEADERS_NO_BODY_204 14
|
||||
, {.name= "204 no headers no body"
|
||||
,.type= HTTP_RESPONSE
|
||||
,.raw= "HTTP/1.1 204 No Content\r\n\r\n"
|
||||
,.should_keep_alive= TRUE
|
||||
,.message_complete_on_eof= FALSE
|
||||
,.http_major= 1
|
||||
,.http_minor= 1
|
||||
,.status_code= 204
|
||||
,.num_headers= 0
|
||||
,.headers= {}
|
||||
,.body_size= 0
|
||||
,.body= ""
|
||||
}
|
||||
|
||||
, {.name= NULL } /* sentinel */
|
||||
};
|
||||
|
||||
int
|
||||
@@ -1888,7 +1976,7 @@ main (void)
|
||||
|
||||
printf("response scan 1/2 ");
|
||||
test_scan( &responses[TRAILING_SPACE_ON_CHUNKED_BODY]
|
||||
, &responses[NO_HEADERS_NO_BODY_404]
|
||||
, &responses[NO_HEADERS_NO_BODY_204]
|
||||
, &responses[NO_REASON_PHRASE]
|
||||
);
|
||||
|
||||
|
||||
11
deps/npm/.npmignore
vendored
11
deps/npm/.npmignore
vendored
@@ -1,5 +1,4 @@
|
||||
*.swp
|
||||
.*.swp
|
||||
npm-debug.log
|
||||
/test/bin
|
||||
/test/output.log
|
||||
@@ -7,9 +6,9 @@ npm-debug.log
|
||||
/test/packages/npm-test-depends-on-spark/which-spark.log
|
||||
/test/packages/test-package/random-data.txt
|
||||
/test/root
|
||||
node_modules/ronn
|
||||
node_modules/tap
|
||||
node_modules/.bin
|
||||
/node_modules/ronn
|
||||
/node_modules/tap
|
||||
/node_modules/.bin
|
||||
/npmrc
|
||||
/release/
|
||||
|
||||
@@ -19,7 +18,3 @@ html/*.png
|
||||
# don't ignore .npmignore files
|
||||
# these are used in some tests.
|
||||
!.npmignore
|
||||
|
||||
/npm-*.tgz
|
||||
|
||||
*.pyc
|
||||
|
||||
7
deps/npm/.tern-project
vendored
7
deps/npm/.tern-project
vendored
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"libs": [
|
||||
],
|
||||
"plugins": {
|
||||
"node": {}
|
||||
}
|
||||
}
|
||||
4
deps/npm/.travis.yml
vendored
Normal file
4
deps/npm/.travis.yml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
language: node_js
|
||||
before_install: "make &>out || cat out; rm out"
|
||||
node_js:
|
||||
- 0.6
|
||||
19
deps/npm/AUTHORS
vendored
19
deps/npm/AUTHORS
vendored
@@ -71,22 +71,3 @@ Domenic Denicola <domenic@domenicdenicola.com>
|
||||
James Halliday <mail@substack.net>
|
||||
Jeremy Cantrell <jmcantrell@gmail.com>
|
||||
Ribettes <patlogan29@gmail.com>
|
||||
Einar Otto Stangvik <einaros@gmail.com>
|
||||
Don Park <donpark@docuverse.com>
|
||||
Kei Son <heyacct@gmail.com>
|
||||
Nicolas Morel <marsup@gmail.com>
|
||||
Mark Dube <markisdee@gmail.com>
|
||||
Nathan Rajlich <nathan@tootallnate.net>
|
||||
Maxim Bogushevich <boga1@mail.ru>
|
||||
Justin Beckwith <justbe@microsoft.com>
|
||||
Meaglin <Meaglin.wasabi@gmail.com>
|
||||
Ben Evans <ben@bensbit.co.uk>
|
||||
Nathan Zadoks <nathan@nathan7.eu>
|
||||
Brian White <mscdex@gmail.com>
|
||||
Jed Schmidt <tr@nslator.jp>
|
||||
Ian Livingstone <ianl@cs.dal.ca>
|
||||
Patrick Pfeiffer <patrick@buzzle.at>
|
||||
Paul Miller <paul@paulmillr.com>
|
||||
seebees <seebees@gmail.com>
|
||||
Carl Lange <carl@flax.ie>
|
||||
Jan Lehnardt <jan@apache.org>
|
||||
|
||||
21
deps/npm/LICENSE
vendored
21
deps/npm/LICENSE
vendored
@@ -1,4 +1,4 @@
|
||||
Copyright (c) Isaac Z. Schlueter (the "Original Author")
|
||||
Copyright 2009-2012, Isaac Z. Schlueter (the "Original Author")
|
||||
All rights reserved.
|
||||
|
||||
MIT +no-false-attribs License
|
||||
@@ -42,24 +42,23 @@ Original Author, when distributed with the Software.
|
||||
part of the Node.js project, and is neither owned by nor
|
||||
officially affiliated with Joyent, Inc.
|
||||
|
||||
Packages published in the npm registry (other than the Software and
|
||||
its included dependencies) are not part of npm itself, are the sole
|
||||
property of their respective maintainers, and are not covered by
|
||||
this license.
|
||||
Packages published in the npm registry are not part of npm
|
||||
itself, are the sole property of their respective maintainers,
|
||||
and are not covered by this license.
|
||||
|
||||
"npm Logo" created by Mathias Pettersson and Brian Hammond,
|
||||
used with permission.
|
||||
|
||||
"Gubblebum Blocky" font
|
||||
Copyright (c) by Tjarda Koster, http://jelloween.deviantart.com
|
||||
Copyright (c) 2007 by Tjarda Koster, http://jelloween.deviantart.com
|
||||
included for use in the npm website and documentation,
|
||||
used with permission.
|
||||
|
||||
This program uses "request", Copyright (c) Mikeal Rogers,
|
||||
This program uses "node-uuid", Copyright (c) 2010 Robert Kieffer,
|
||||
according to the terms of the MIT license.
|
||||
|
||||
This program uses "request", Copyright (c) 2011 Mikeal Rogers,
|
||||
according to the terms of the Apache license.
|
||||
|
||||
This program uses "mkdirp", Copyright (c) James Halliday,
|
||||
This program uses "mkdirp", Copyright (c) 2010 James Halliday,
|
||||
according to the terms of the MIT/X11 license.
|
||||
|
||||
This program uses "opener", Copyright (c) Domenic Denicola,
|
||||
according to the terms of the DWTFPL2 license.
|
||||
|
||||
28
deps/npm/Makefile
vendored
28
deps/npm/Makefile
vendored
@@ -92,7 +92,7 @@ doc/cli/index.md: $(markdowns) scripts/index-build.js scripts/doc-build.sh packa
|
||||
node scripts/index-build.js > $@
|
||||
|
||||
node_modules/.bin/ronn:
|
||||
node cli.js install ronn
|
||||
node cli.js install https://github.com/isaacs/ronnjs/tarball/master
|
||||
|
||||
doc: man
|
||||
|
||||
@@ -101,10 +101,16 @@ man: $(cli_docs) $(api_docs)
|
||||
test:
|
||||
node cli.js test
|
||||
|
||||
version: link
|
||||
git add package.json &&\
|
||||
git ci -m v$(shell npm -v)
|
||||
|
||||
publish: link doc
|
||||
@git tag -d v$(shell npm -v) || true
|
||||
@git push origin :v$(shell npm -v) || true
|
||||
@npm unpublish npm@$(shell npm -v) || true
|
||||
git clean -fd
|
||||
git tag -s -m v$(shell npm -v) v$(shell npm -v) &&\
|
||||
git push origin --tags &&\
|
||||
npm publish &&\
|
||||
npm tag npm@$(shell npm -v) $(shell npm -v | awk -F. '{print $$1 "." $$2}') &&\
|
||||
@@ -113,26 +119,18 @@ publish: link doc
|
||||
|
||||
docpublish: doc-publish
|
||||
doc-publish: doc
|
||||
rsync -vazu --stats --no-implied-dirs --delete \
|
||||
html/doc/ \
|
||||
node@npmjs.org:/home/node/npm-www/doc
|
||||
rsync -vazu --stats --no-implied-dirs --delete \
|
||||
html/api/ \
|
||||
node@npmjs.org:/home/node/npm-www/api
|
||||
rsync -vazu --stats --no-implied-dirs --delete \
|
||||
html/static/webfonts/ \
|
||||
node@npmjs.org:/home/node/npm-www/static/webfonts
|
||||
rsync -vazu --stats --no-implied-dirs --delete \
|
||||
html/static/style.css \
|
||||
node@npmjs.org:/home/node/npm-www/static/
|
||||
rsync -vazu --stats --no-implied-dirs --delete html/doc/ npmjs.org:/var/www/npmjs.org/public/doc
|
||||
rsync -vazu --stats --no-implied-dirs --delete html/api/ npmjs.org:/var/www/npmjs.org/public/api
|
||||
rsync -vazu --stats --no-implied-dirs --delete html/webfonts/ npmjs.org:/var/www/npmjs.org/public/webfonts
|
||||
scp html/style.css npmjs.org:/var/www/npmjs.org/public/
|
||||
|
||||
zip-publish: release
|
||||
scp release/* node@nodejs.org:dist/npm/
|
||||
scp release/* npmjs.org:/var/www/npmjs.org/public/dist/
|
||||
|
||||
release:
|
||||
@bash scripts/release.sh
|
||||
|
||||
sandwich:
|
||||
@[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || echo "make it yourself" && exit 13
|
||||
@[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || echo "make it yourself"
|
||||
|
||||
.PHONY: all latest install dev link doc clean uninstall test man doc-publish doc-clean docclean docpublish release zip-publish
|
||||
|
||||
57
deps/npm/README.md
vendored
57
deps/npm/README.md
vendored
@@ -9,7 +9,7 @@ Much more info available via `npm help` once it's installed.
|
||||
|
||||
## IMPORTANT
|
||||
|
||||
**You need node v0.8 or higher to run this program.**
|
||||
**You need node v0.6 or higher to run this program.**
|
||||
|
||||
To install an old **and unsupported** version of npm that works on node 0.3
|
||||
and prior, clone the git repo and dig through the old tags and branches.
|
||||
@@ -35,18 +35,31 @@ paths, etc.) then read on.
|
||||
|
||||
## Fancy Install (Unix)
|
||||
|
||||
There's a pretty robust install script at
|
||||
<https://npmjs.org/install.sh>. You can download that and run it.
|
||||
To install npm with one command, do this:
|
||||
|
||||
curl http://npmjs.org/install.sh | sh
|
||||
|
||||
To skip the npm 0.x cleanup, do this:
|
||||
|
||||
curl http://npmjs.org/install.sh | clean=no sh
|
||||
|
||||
To say "yes" to the 0.x cleanup, but skip the prompt:
|
||||
|
||||
curl http://npmjs.org/install.sh | clean=yes sh
|
||||
|
||||
If you get permission errors, you'll need to **run** the script as root.
|
||||
(Note, just putting `sudo` in front of the `curl` will **fetch** the script
|
||||
as root.)
|
||||
|
||||
### Slightly Fancier
|
||||
|
||||
You can set any npm configuration params with that script:
|
||||
|
||||
npm_config_prefix=/some/path sh install.sh
|
||||
curl http://npmjs.org/install.sh | npm_config_prefix=/some/path sh
|
||||
|
||||
Or, you can run it in uber-debuggery mode:
|
||||
|
||||
npm_debug=1 sh install.sh
|
||||
curl http://npmjs.org/install.sh | npm_debug=1 sh
|
||||
|
||||
### Even Fancier
|
||||
|
||||
@@ -60,7 +73,7 @@ for testing, or running stuff without actually installing npm itself.)
|
||||
|
||||
## Fancy Windows Install
|
||||
|
||||
You can download a zip file from <https://npmjs.org/dist/>, and unpack it
|
||||
You can download a zip file from <http://npmjs.org/dist/>, and unpack it
|
||||
in the same folder where node.exe lives.
|
||||
|
||||
If that's not fancy enough for you, then you can fetch the code with
|
||||
@@ -70,6 +83,21 @@ git, and mess with it directly.
|
||||
|
||||
No.
|
||||
|
||||
## Dev Install
|
||||
|
||||
To install the latest **unstable** development version from git:
|
||||
|
||||
git clone https://github.com/isaacs/npm.git
|
||||
cd npm
|
||||
sudo make install # (or: `node cli.js install -gf`)
|
||||
|
||||
If you're sitting in the code folder reading this document in your
|
||||
terminal, then you've already got the code. Just do:
|
||||
|
||||
sudo make install
|
||||
|
||||
and npm will install itself.
|
||||
|
||||
## Permissions when Using npm to Install Other Stuff
|
||||
|
||||
**tl;dr**
|
||||
@@ -135,14 +163,6 @@ you have chosen.
|
||||
If you would like to use npm programmatically, you can do that.
|
||||
It's not very well documented, but it *is* rather simple.
|
||||
|
||||
Most of the time, unless you actually want to do all the things that
|
||||
npm does, you should try using one of npm's dependencies rather than
|
||||
using npm itself, if possible.
|
||||
|
||||
Eventually, npm will be just a thin cli wrapper around the modules
|
||||
that it depends on, but for now, there are some things that you must
|
||||
use npm itself to do.
|
||||
|
||||
var npm = require("npm")
|
||||
npm.load(myConfigObject, function (er) {
|
||||
if (er) return handlError(er)
|
||||
@@ -169,13 +189,14 @@ help config` to learn about all the options you can set there.
|
||||
|
||||
## More Docs
|
||||
|
||||
Check out the [docs](https://npmjs.org/doc/),
|
||||
especially the [faq](https://npmjs.org/doc/faq.html).
|
||||
Check out the [docs](http://npmjs.org/doc/),
|
||||
especially the [faq](http://npmjs.org/doc/faq.html).
|
||||
|
||||
You can use the `npm help` command to read any of them.
|
||||
|
||||
If you're a developer, and you want to use npm to publish your program,
|
||||
you should [read this](https://npmjs.org/doc/developers.html)
|
||||
you should
|
||||
[read this](http://npmjs.org/doc/developers.html)
|
||||
|
||||
## Legal Stuff
|
||||
|
||||
@@ -221,7 +242,7 @@ If this concerns you, inspect the source before using packages.
|
||||
When you find issues, please report them:
|
||||
|
||||
* web:
|
||||
<https://github.com/isaacs/npm/issues>
|
||||
<http://github.com/isaacs/npm/issues>
|
||||
* email:
|
||||
<npm-@googlegroups.com>
|
||||
|
||||
|
||||
11
deps/npm/bin/npm-cli.js
vendored
11
deps/npm/bin/npm-cli.js
vendored
@@ -22,10 +22,10 @@ log.info("it worked if it ends with", "ok")
|
||||
var fs = require("graceful-fs")
|
||||
, path = require("path")
|
||||
, npm = require("../lib/npm.js")
|
||||
, npmconf = require("npmconf")
|
||||
, ini = require("../lib/utils/ini.js")
|
||||
, errorHandler = require("../lib/utils/error-handler.js")
|
||||
|
||||
, configDefs = npmconf.defs
|
||||
, configDefs = require("../lib/utils/config-defs.js")
|
||||
, shorthands = configDefs.shorthands
|
||||
, types = configDefs.types
|
||||
, nopt = require("nopt")
|
||||
@@ -50,9 +50,10 @@ if (conf.version) {
|
||||
}
|
||||
|
||||
if (conf.versions) {
|
||||
npm.command = "version"
|
||||
conf.usage = false
|
||||
npm.argv = []
|
||||
var v = process.versions
|
||||
v.npm = npm.version
|
||||
console.log(v)
|
||||
return
|
||||
}
|
||||
|
||||
log.info("using", "npm@%s", npm.version)
|
||||
|
||||
2
deps/npm/doc/api/deprecate.md
vendored
2
deps/npm/doc/api/deprecate.md
vendored
@@ -25,8 +25,6 @@ The 'args' parameter must have exactly two elements:
|
||||
Note that you must be the package owner to deprecate something. See the
|
||||
`owner` and `adduser` help topics.
|
||||
|
||||
To un-deprecate a package, specify an empty string (`""`) for the `message` argument.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
* npm-publish(3)
|
||||
|
||||
15
deps/npm/doc/api/npm.md
vendored
15
deps/npm/doc/api/npm.md
vendored
@@ -4,7 +4,7 @@ npm(3) -- node package manager
|
||||
## SYNOPSIS
|
||||
|
||||
var npm = require("npm")
|
||||
npm.load([configObject,] function (er, npm) {
|
||||
npm.load(configObject, function (er, npm) {
|
||||
// use the npm object, now that it's loaded.
|
||||
|
||||
npm.config.set(key, val)
|
||||
@@ -25,13 +25,12 @@ This is the API documentation for npm.
|
||||
To find documentation of the command line
|
||||
client, see `npm(1)`.
|
||||
|
||||
Prior to using npm's commands, `npm.load()` must be called.
|
||||
If you provide `configObject` as an object hash of top-level
|
||||
configs, they override the values stored in the various config
|
||||
locations. In the npm command line client, this set of configs
|
||||
is parsed from the command line options. Additional configuration
|
||||
params are loaded from two configuration files. See `npm-config(1)`
|
||||
for more information.
|
||||
Prior to using npm's commands,
|
||||
`npm.load()` must be called with an object hash of
|
||||
top-level configs. In the npm command line client,
|
||||
this set of configs is parsed from the command line options. Additional
|
||||
configuration params are loaded from two configuration files. See
|
||||
`npm-config(1)` for more information.
|
||||
|
||||
After that, each of the functions are accessible in the
|
||||
commands object: `npm.commands.<cmd>`. See `npm-index(1)` for a list of
|
||||
|
||||
2
deps/npm/doc/cli/bugs.md
vendored
2
deps/npm/doc/cli/bugs.md
vendored
@@ -15,7 +15,7 @@ config param.
|
||||
|
||||
### browser
|
||||
|
||||
* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
|
||||
* Default: OS X: `"open"`, others: `"google-chrome"`
|
||||
* Type: String
|
||||
|
||||
The browser that is called by the `npm bugs` command to open websites.
|
||||
|
||||
2
deps/npm/doc/cli/coding-style.md
vendored
2
deps/npm/doc/cli/coding-style.md
vendored
@@ -10,8 +10,6 @@ designed to reduce visual clutter and make bugs more apparent.
|
||||
If you want to contribute to npm (which is very encouraged), you should
|
||||
make your code conform to npm's style.
|
||||
|
||||
Note: this concerns npm's code not the specific packages at npmjs.org
|
||||
|
||||
## Line Length
|
||||
|
||||
Keep lines shorter than 80 characters. It's better for lines to be
|
||||
|
||||
64
deps/npm/doc/cli/config.md
vendored
64
deps/npm/doc/cli/config.md
vendored
@@ -36,15 +36,11 @@ work the same.
|
||||
`$HOME/.npmrc` (or the `userconfig` param, if set above)
|
||||
|
||||
This file is an ini-file formatted list of `key = value` parameters.
|
||||
Environment variables can be replaced using `${VARIABLE_NAME}`. For example:
|
||||
|
||||
prefix = ${HOME}/.npm-packages
|
||||
|
||||
### Global config file
|
||||
|
||||
`$PREFIX/etc/npmrc` (or the `globalconfig` param, if set above):
|
||||
This file is an ini-file formatted list of `key = value` parameters.
|
||||
Environment variables can be replaced as above.
|
||||
This file is an ini-file formatted list of `key = value` parameters
|
||||
|
||||
### Built-in config file
|
||||
|
||||
@@ -116,6 +112,7 @@ The following shorthands are parsed on the command-line:
|
||||
* `-reg`: `--registry`
|
||||
* `-v`: `--version`
|
||||
* `-f`: `--force`
|
||||
* `-l`: `--long`
|
||||
* `-desc`: `--description`
|
||||
* `-S`: `--save`
|
||||
* `-D`: `--save-dev`
|
||||
@@ -171,21 +168,9 @@ then the user could change the behavior by doing:
|
||||
Force npm to always require authentication when accessing the registry,
|
||||
even for `GET` requests.
|
||||
|
||||
### bin-links
|
||||
|
||||
* Default: `true`
|
||||
* Type: Boolean
|
||||
|
||||
Tells npm to create symlinks (or `.cmd` shims on Windows) for package
|
||||
executables.
|
||||
|
||||
Set to false to have it not do this. This can be used to work around
|
||||
the fact that some file systems don't support symlinks, even on
|
||||
ostensibly Unix systems.
|
||||
|
||||
### browser
|
||||
|
||||
* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
|
||||
* Default: OS X: `"open"`, others: `"google-chrome"`
|
||||
* Type: String
|
||||
|
||||
The browser that is called by the `npm docs` command to open websites.
|
||||
@@ -244,7 +229,7 @@ explicitly used, and that only GET requests use the cache.
|
||||
|
||||
### cache-min
|
||||
|
||||
* Default: 10
|
||||
* Default: 0
|
||||
* Type: Number
|
||||
|
||||
The minimum time (in seconds) to keep items in the registry cache before
|
||||
@@ -373,10 +358,10 @@ Operates in "global" mode, so that packages are installed into the
|
||||
`prefix` folder instead of the current working directory. See
|
||||
`npm-folders(1)` for more on the differences in behavior.
|
||||
|
||||
* packages are installed into the `{prefix}/lib/node_modules` folder, instead of the
|
||||
* packages are installed into the `prefix/node_modules` folder, instead of the
|
||||
current working directory.
|
||||
* bin files are linked to `{prefix}/bin`
|
||||
* man pages are linked to `{prefix}/share/man`
|
||||
* bin files are linked to `prefix/bin`
|
||||
* man pages are linked to `prefix/share/man`
|
||||
|
||||
### globalconfig
|
||||
|
||||
@@ -414,7 +399,7 @@ A proxy to use for outgoing https requests.
|
||||
|
||||
### user-agent
|
||||
|
||||
* Default: node/{process.version} {process.platform} {process.arch}
|
||||
* Default: npm/{npm.version} node/{process.version}
|
||||
* Type: String
|
||||
|
||||
Sets a User-Agent to the request header
|
||||
@@ -516,9 +501,6 @@ It cannot be set from the command line, but if you are using npm
|
||||
programmatically, you may wish to send logs to somewhere other than
|
||||
stderr.
|
||||
|
||||
If the `color` config is set to true, then this stream will receive
|
||||
colored output if it is a TTY.
|
||||
|
||||
### long
|
||||
|
||||
* Default: false
|
||||
@@ -565,15 +547,6 @@ The url to report npat test results.
|
||||
A node module to `require()` when npm loads. Useful for programmatic
|
||||
usage.
|
||||
|
||||
### optional
|
||||
|
||||
* Default: true
|
||||
* Type: Boolean
|
||||
|
||||
Attempt to install packages in the `optionalDependencies` hash. Note
|
||||
that if these packages fail to install, the overall installation
|
||||
process is not aborted.
|
||||
|
||||
### parseable
|
||||
|
||||
* Default: false
|
||||
@@ -584,7 +557,7 @@ standard output.
|
||||
|
||||
### prefix
|
||||
|
||||
* Default: see npm-folders(1)
|
||||
* Default: node's process.installPrefix
|
||||
* Type: path
|
||||
|
||||
The location to install global items. If set on the command line, then
|
||||
@@ -721,25 +694,6 @@ character to indicate reverse sort.
|
||||
|
||||
The shell to run for the `npm explore` command.
|
||||
|
||||
### shrinkwrap
|
||||
|
||||
* Default: true
|
||||
* Type: Boolean
|
||||
|
||||
If set to false, then ignore `npm-shrinkwrap.json` files when
|
||||
installing.
|
||||
|
||||
### sign-git-tag
|
||||
|
||||
* Default: false
|
||||
* Type: Boolean
|
||||
|
||||
If set to true, then the `npm version` command will tag the version
|
||||
using `-s` to add a signature.
|
||||
|
||||
Note that git requires you to have set up GPG keys in your git configs
|
||||
for this to work properly.
|
||||
|
||||
### strict-ssl
|
||||
|
||||
* Default: true
|
||||
|
||||
53
deps/npm/doc/cli/dedupe.md
vendored
53
deps/npm/doc/cli/dedupe.md
vendored
@@ -1,53 +0,0 @@
|
||||
npm-dedupe(1) -- Reduce duplication
|
||||
===================================
|
||||
|
||||
## SYNOPSIS
|
||||
|
||||
npm dedupe [package names...]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
Searches the local package tree and attempts to simplify the overall
|
||||
structure by moving dependencies further up the tree, where they can
|
||||
be more effectively shared by multiple dependent packages.
|
||||
|
||||
For example, consider this dependency graph:
|
||||
|
||||
a
|
||||
+-- b <-- depends on c@1.0.x
|
||||
| `-- c@1.0.3
|
||||
`-- d <-- depends on c@~1.0.9
|
||||
`-- c@1.0.10
|
||||
|
||||
In this case, `npm-dedupe(1)` will transform the tree to:
|
||||
|
||||
a
|
||||
+-- b
|
||||
+-- d
|
||||
`-- c@1.0.10
|
||||
|
||||
Because of the hierarchical nature of node's module lookup, b and d
|
||||
will both get their dependency met by the single c package at the root
|
||||
level of the tree.
|
||||
|
||||
If a suitable version exists at the target location in the tree
|
||||
already, then it will be left untouched, but the other duplicates will
|
||||
be deleted.
|
||||
|
||||
If no suitable version can be found, then a warning is printed, and
|
||||
nothing is done.
|
||||
|
||||
If any arguments are supplied, then they are filters, and only the
|
||||
named packages will be touched.
|
||||
|
||||
Note that this operation transforms the dependency tree, and may
|
||||
result in packages getting updated versions, perhaps from the npm
|
||||
registry.
|
||||
|
||||
This feature is experimental, and may change in future versions.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
* npm-ls(1)
|
||||
* npm-update(1)
|
||||
* npm-install(1)
|
||||
2
deps/npm/doc/cli/deprecate.md
vendored
2
deps/npm/doc/cli/deprecate.md
vendored
@@ -18,8 +18,6 @@ something like this:
|
||||
Note that you must be the package owner to deprecate something. See the
|
||||
`owner` and `adduser` help topics.
|
||||
|
||||
To un-deprecate a package, specify an empty string (`""`) for the `message` argument.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
* npm-publish(1)
|
||||
|
||||
32
deps/npm/doc/cli/developers.md
vendored
32
deps/npm/doc/cli/developers.md
vendored
@@ -97,34 +97,10 @@ more info.
|
||||
## Keeping files *out* of your package
|
||||
|
||||
Use a `.npmignore` file to keep stuff out of your package. If there's
|
||||
no `.npmignore` file, but there *is* a `.gitignore` file, then npm will
|
||||
ignore the stuff matched by the `.gitignore` file. If you *want* to
|
||||
include something that is excluded by your `.gitignore` file, you can
|
||||
create an empty `.npmignore` file to override it.
|
||||
|
||||
By default, the following paths and files are ignored, so there's no
|
||||
need to add them to `.npmignore` explicitly:
|
||||
|
||||
* `.*.swp`
|
||||
* `._*`
|
||||
* `.DS_Store`
|
||||
* `.git`
|
||||
* `.hg`
|
||||
* `.lock-wscript`
|
||||
* `.svn`
|
||||
* `.wafpickle-*`
|
||||
* `CVS`
|
||||
* `npm-debug.log`
|
||||
|
||||
Additionally, everything in `node_modules` is ignored, except for
|
||||
bundled dependencies. npm automatically handles this for you, so don't
|
||||
bother adding `node_modules` to `.npmignore`.
|
||||
|
||||
The following paths and files are never ignored, so adding them to
|
||||
`.npmignore` is pointless:
|
||||
|
||||
* `package.json`
|
||||
* `README.*`
|
||||
no .npmignore file, but there *is* a .gitignore file, then npm will
|
||||
ignore the stuff matched by the .gitignore file. If you *want* to
|
||||
include something that is excluded by your .gitignore file, you can
|
||||
create an empty .npmignore file to override it.
|
||||
|
||||
## Link Packages
|
||||
|
||||
|
||||
34
deps/npm/doc/cli/disputes.md
vendored
34
deps/npm/doc/cli/disputes.md
vendored
@@ -4,10 +4,8 @@ npm-disputes(1) -- Handling Module Name Disputes
|
||||
## SYNOPSIS
|
||||
|
||||
1. Get the author email with `npm owner ls <pkgname>`
|
||||
2. Email the author, CC <i@izs.me>.
|
||||
3. After a few weeks, if there's no resolution, we'll sort it out.
|
||||
|
||||
Don't squat on package names. Publish code or move out of the way.
|
||||
1. Email the author, CC <i@izs.me>.
|
||||
2. After a few weeks, if there's no resolution, we'll sort it out.
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
@@ -15,9 +13,9 @@ There sometimes arise cases where a user publishes a module, and then
|
||||
later, some other user wants to use that name. Here are some common
|
||||
ways that happens (each of these is based on actual events.)
|
||||
|
||||
1. Joe writes a JavaScript module `foo`, which is not node-specific.
|
||||
Joe doesn't use node at all. Bob wants to use `foo` in node, so he
|
||||
wraps it in an npm module. Some time later, Joe starts using node,
|
||||
1. Bob writes a JavaScript module `foo`, which is not node-specific.
|
||||
Bob doesn't use node at all. Joe wants to use `foo` in node, so he
|
||||
wraps it in an npm module. Some time later, Bob starts using node,
|
||||
and wants to take over management of his program.
|
||||
2. Bob writes an npm module `foo`, and publishes it. Perhaps much
|
||||
later, Joe finds a bug in `foo`, and fixes it. He sends a pull
|
||||
@@ -42,15 +40,14 @@ Joe's appropriate course of action in each case is the same.
|
||||
|
||||
1. `npm owner ls foo`. This will tell Joe the email address of the
|
||||
owner (Bob).
|
||||
2. Joe emails Bob, explaining the situation **as respectfully as possible**,
|
||||
2. Joe emails Bob, explaining the situation **as respecfully as possible**,
|
||||
and what he would like to do with the module name. He adds
|
||||
isaacs <i@izs.me> to the CC list of the email. Mention in the email
|
||||
that Bob can run `npm owner add joe foo` to add Joe as an owner of
|
||||
the `foo` package.
|
||||
3. After a reasonable amount of time, if Bob has not responded, or if
|
||||
Bob and Joe can't come to any sort of resolution, email isaacs
|
||||
<i@izs.me> and we'll sort it out. ("Reasonable" is usually about 4
|
||||
weeks, but extra time is allowed around common holidays.)
|
||||
<i@izs.me> and we'll sort it out.
|
||||
|
||||
## REASONING
|
||||
|
||||
@@ -72,23 +69,12 @@ Some things are not allowed, and will be removed without discussion if
|
||||
they are brought to the attention of the npm registry admins, including
|
||||
but not limited to:
|
||||
|
||||
1. Malware (that is, a package designed to exploit or harm the machine on
|
||||
which it is installed).
|
||||
1. Malware (that is, a module designed to exploit or harm the machine on
|
||||
which it is installed)
|
||||
2. Violations of copyright or licenses (for example, cloning an
|
||||
MIT-licensed program, and then removing or changing the copyright and
|
||||
license statement).
|
||||
license statement)
|
||||
3. Illegal content.
|
||||
4. "Squatting" on a package name that you *plan* to use, but aren't
|
||||
actually using. Sorry, I don't care how great the name is, or how
|
||||
perfect a fit it is for the thing that someday might happen. If
|
||||
someone wants to use it today, and you're just taking up space with
|
||||
an empty tarball, you're going to be evicted.
|
||||
5. Putting empty packages in the registry. Packages must have SOME
|
||||
functionality. It can be silly, but it can't be *nothing*. (See
|
||||
also: squatting.)
|
||||
6. Doing weird things with the registry, like using it as your own
|
||||
personal application database or otherwise putting non-packagey
|
||||
things into it.
|
||||
|
||||
If you see bad behavior like this, please report it right away.
|
||||
|
||||
|
||||
2
deps/npm/doc/cli/docs.md
vendored
2
deps/npm/doc/cli/docs.md
vendored
@@ -16,7 +16,7 @@ config param.
|
||||
|
||||
### browser
|
||||
|
||||
* Default: OS X: `"open"`, Windows: `"start"`, Others: `"xdg-open"`
|
||||
* Default: OS X: `"open"`, others: `"google-chrome"`
|
||||
* Type: String
|
||||
|
||||
The browser that is called by the `npm docs` command to open websites.
|
||||
|
||||
76
deps/npm/doc/cli/faq.md
vendored
76
deps/npm/doc/cli/faq.md
vendored
@@ -3,7 +3,7 @@ npm-faq(1) -- Frequently Asked Questions
|
||||
|
||||
## Where can I find these docs in HTML?
|
||||
|
||||
<https://npmjs.org/doc/>, or run:
|
||||
<http://npmjs.org/doc/>, or run:
|
||||
|
||||
npm config set viewer browser
|
||||
|
||||
@@ -72,52 +72,6 @@ Write your own package manager, then. It's not that hard.
|
||||
|
||||
npm will not help you do something that is known to be a bad idea.
|
||||
|
||||
## `"node_modules"` is the name of my deity's arch-rival, and a Forbidden Word in my religion. Can I configure npm to use a different folder?
|
||||
|
||||
No. This will never happen. This question comes up sometimes,
|
||||
because it seems silly from the outside that npm couldn't just be
|
||||
configured to put stuff somewhere else, and then npm could load them
|
||||
from there. It's an arbitrary spelling choice, right? What's the big
|
||||
deal?
|
||||
|
||||
At the time of this writing, the string `'node_modules'` appears 151
|
||||
times in 53 separate files in npm and node core (excluding tests and
|
||||
documentation).
|
||||
|
||||
Some of these references are in node's built-in module loader. Since
|
||||
npm is not involved **at all** at run-time, node itself would have to
|
||||
be configured to know where you've decided to stick stuff. Complexity
|
||||
hurdle #1. Since the Node module system is locked, this cannot be
|
||||
changed, and is enough to kill this request. But I'll continue, in
|
||||
deference to your deity's delicate feelings regarding spelling.
|
||||
|
||||
Many of the others are in dependencies that npm uses, which are not
|
||||
necessarily tightly coupled to npm (in the sense that they do not read
|
||||
npm's configuration files, etc.) Each of these would have to be
|
||||
configured to take the name of the `node_modules` folder as a
|
||||
parameter. Complexity hurdle #2.
|
||||
|
||||
Furthermore, npm has the ability to "bundle" dependencies by adding
|
||||
the dep names to the `"bundledDependencies"` list in package.json,
|
||||
which causes the folder to be included in the package tarball. What
|
||||
if the author of a module bundles its dependencies, and they use a
|
||||
different spelling for `node_modules`? npm would have to rename the
|
||||
folder at publish time, and then be smart enough to unpack it using
|
||||
your locally configured name. Complexity hurdle #3.
|
||||
|
||||
Furthermore, what happens when you *change* this name? Fine, it's
|
||||
easy enough the first time, just rename the `node_modules` folders to
|
||||
`./blergyblerp/` or whatever name you choose. But what about when you
|
||||
change it again? npm doesn't currently track any state about past
|
||||
configuration settings, so this would be rather difficult to do
|
||||
properly. It would have to track every previous value for this
|
||||
config, and always accept any of them, or else yesterday's install may
|
||||
be broken tomorrow. Complexity hurdle #5.
|
||||
|
||||
Never going to happen. The folder is named `node_modules`. It is
|
||||
written indelibly in the Node Way, handed down from the ancient times
|
||||
of Node 0.3.
|
||||
|
||||
## Should I check my `node_modules` folder into git?
|
||||
|
||||
Mikeal Rogers answered this question very well:
|
||||
@@ -190,7 +144,7 @@ command.)
|
||||
|
||||
In those cases, you can do this:
|
||||
|
||||
curl https://npmjs.org/install.sh | sh
|
||||
curl http://npmjs.org/install.sh | sh
|
||||
|
||||
## What is a `package`?
|
||||
|
||||
@@ -221,19 +175,12 @@ an argument to `git checkout`. The default is `master`.
|
||||
|
||||
## How do I install node with npm?
|
||||
|
||||
You don't. Try one of these node version managers:
|
||||
|
||||
Unix:
|
||||
You don't. Try one of these:
|
||||
|
||||
* <http://github.com/isaacs/nave>
|
||||
* <http://github.com/visionmedia/n>
|
||||
* <http://github.com/creationix/nvm>
|
||||
|
||||
Windows:
|
||||
|
||||
* <http://github.com/marcelklehr/nodist>
|
||||
* <https://github.com/hakobera/nvmw>
|
||||
|
||||
## How can I use npm for development?
|
||||
|
||||
See `npm-developers(1)` and `npm-json(1)`.
|
||||
@@ -264,29 +211,20 @@ means that publishes go over HTTP by default in those versions of node.
|
||||
|
||||
## I forgot my password, and can't publish. How do I reset it?
|
||||
|
||||
Go to <https://npmjs.org/forgot>.
|
||||
Go to <http://admin.npmjs.org/reset>.
|
||||
|
||||
## I get ECONNREFUSED a lot. What's up?
|
||||
|
||||
Either the registry is down, or node's DNS isn't able to reach out.
|
||||
|
||||
To check if the registry is down, open up <http://registry.npmjs.org/>
|
||||
To check if the registry is down, open up
|
||||
<http://registry.npmjs.org/>
|
||||
in a web browser. This will also tell you if you are just unable to
|
||||
access the internet for some reason.
|
||||
|
||||
If the registry IS down, let me know by emailing or posting an issue.
|
||||
We'll have someone kick it or something.
|
||||
|
||||
## Why no namespaces?
|
||||
|
||||
Please see this discussion: <https://github.com/isaacs/npm/issues/798>
|
||||
|
||||
tl;dr - It doesn't actually make things better, and can make them worse.
|
||||
|
||||
If you want to namespace your own packages, you may: simply use the
|
||||
`-` character to separate the names. npm is a mostly anarchic system.
|
||||
There is not sufficient need to impose namespace rules on everyone.
|
||||
|
||||
## Who does npm?
|
||||
|
||||
`npm view npm author`
|
||||
@@ -298,7 +236,7 @@ There is not sufficient need to impose namespace rules on everyone.
|
||||
Discuss it on the mailing list, or post an issue.
|
||||
|
||||
* <npm-@googlegroups.com>
|
||||
* <https://github.com/isaacs/npm/issues>
|
||||
* <http://github.com/isaacs/npm/issues>
|
||||
|
||||
## Why does npm hate me?
|
||||
|
||||
|
||||
20
deps/npm/doc/cli/folders.md
vendored
20
deps/npm/doc/cli/folders.md
vendored
@@ -157,21 +157,21 @@ In this case, we might expect a folder structure like this:
|
||||
+-- node_modules
|
||||
+-- blerg (1.2.5) <---[A]
|
||||
+-- bar (1.2.3) <---[B]
|
||||
| `-- node_modules
|
||||
| +-- baz (2.0.2) <---[C]
|
||||
| | `-- node_modules
|
||||
| | `-- quux (3.2.0)
|
||||
| `-- asdf (2.3.4)
|
||||
| +-- node_modules
|
||||
| | `-- baz (2.0.2) <---[C]
|
||||
| | `-- node_modules
|
||||
| | `-- quux (3.2.0)
|
||||
| `-- asdf (2.3.4)
|
||||
`-- baz (1.2.3) <---[D]
|
||||
`-- node_modules
|
||||
`-- quux (3.2.0) <---[E]
|
||||
|
||||
Since foo depends directly on `bar@1.2.3` and `baz@1.2.3`, those are
|
||||
Since foo depends directly on bar@1.2.3 and baz@1.2.3, those are
|
||||
installed in foo's `node_modules` folder.
|
||||
|
||||
Even though the latest copy of blerg is 1.3.7, foo has a specific
|
||||
dependency on version 1.2.5. So, that gets installed at [A]. Since the
|
||||
parent installation of blerg satisfies bar's dependency on `blerg@1.x`,
|
||||
parent installation of blerg satisfie's bar's dependency on blerg@1.x,
|
||||
it does not install another copy under [B].
|
||||
|
||||
Bar [B] also has dependencies on baz and asdf, so those are installed in
|
||||
@@ -179,11 +179,11 @@ bar's `node_modules` folder. Because it depends on `baz@2.x`, it cannot
|
||||
re-use the `baz@1.2.3` installed in the parent `node_modules` folder [D],
|
||||
and must install its own copy [C].
|
||||
|
||||
Underneath bar, the `baz -> quux -> bar` dependency creates a cycle.
|
||||
However, because bar is already in quux's ancestry [B], it does not
|
||||
Underneath bar, the `baz->quux->bar` dependency creates a cycle.
|
||||
However, because `bar` is already in `quux`'s ancestry [B], it does not
|
||||
unpack another copy of bar into that folder.
|
||||
|
||||
Underneath `foo -> baz` [D], quux's [E] folder tree is empty, because its
|
||||
Underneath `foo->baz` [D], quux's [E] folder tree is empty, because its
|
||||
dependency on bar is satisfied by the parent folder copy installed at [B].
|
||||
|
||||
For a graphical breakdown of what is installed where, use `npm ls`.
|
||||
|
||||
209
deps/npm/doc/cli/global.md
vendored
209
deps/npm/doc/cli/global.md
vendored
@@ -1,209 +0,0 @@
|
||||
npm-folders(1) -- Folder Structures Used by npm
|
||||
===============================================
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
npm puts various things on your computer. That's its job.
|
||||
|
||||
This document will tell you what it puts where.
|
||||
|
||||
### tl;dr
|
||||
|
||||
* Local install (default): puts stuff in `./node_modules` of the current
|
||||
package root.
|
||||
* Global install (with `-g`): puts stuff in /usr/local or wherever node
|
||||
is installed.
|
||||
* Install it **locally** if you're going to `require()` it.
|
||||
* Install it **globally** if you're going to run it on the command line.
|
||||
* If you need both, then install it in both places, or use `npm link`.
|
||||
|
||||
### prefix Configuration
|
||||
|
||||
The `prefix` config defaults to the location where node is installed.
|
||||
On most systems, this is `/usr/local`, and most of the time is the same
|
||||
as node's `process.installPrefix`.
|
||||
|
||||
On windows, this is the exact location of the node.exe binary. On Unix
|
||||
systems, it's one level up, since node is typically installed at
|
||||
`{prefix}/bin/node` rather than `{prefix}/node.exe`.
|
||||
|
||||
When the `global` flag is set, npm installs things into this prefix.
|
||||
When it is not set, it uses the root of the current package, or the
|
||||
current working directory if not in a package already.
|
||||
|
||||
### Node Modules
|
||||
|
||||
Packages are dropped into the `node_modules` folder under the `prefix`.
|
||||
When installing locally, this means that you can
|
||||
`require("packagename")` to load its main module, or
|
||||
`require("packagename/lib/path/to/sub/module")` to load other modules.
|
||||
|
||||
Global installs on Unix systems go to `{prefix}/lib/node_modules`.
|
||||
Global installs on Windows go to `{prefix}/node_modules` (that is, no
|
||||
`lib` folder.)
|
||||
|
||||
If you wish to `require()` a package, then install it locally.
|
||||
|
||||
### Executables
|
||||
|
||||
When in global mode, executables are linked into `{prefix}/bin` on Unix,
|
||||
or directly into `{prefix}` on Windows.
|
||||
|
||||
When in local mode, executables are linked into
|
||||
`./node_modules/.bin` so that they can be made available to scripts run
|
||||
through npm. (For example, so that a test runner will be in the path
|
||||
when you run `npm test`.)
|
||||
|
||||
### Man Pages
|
||||
|
||||
When in global mode, man pages are linked into `{prefix}/share/man`.
|
||||
|
||||
When in local mode, man pages are not installed.
|
||||
|
||||
Man pages are not installed on Windows systems.
|
||||
|
||||
### Cache
|
||||
|
||||
See `npm-cache(1)`. Cache files are stored in `~/.npm` on Posix, or
|
||||
`~/npm-cache` on Windows.
|
||||
|
||||
This is controlled by the `cache` configuration param.
|
||||
|
||||
### Temp Files
|
||||
|
||||
Temporary files are stored by default in the folder specified by the
|
||||
`tmp` config, which defaults to the TMPDIR, TMP, or TEMP environment
|
||||
variables, or `/tmp` on Unix and `c:\windows\temp` on Windows.
|
||||
|
||||
Temp files are given a unique folder under this root for each run of the
|
||||
program, and are deleted upon successful exit.
|
||||
|
||||
## More Information
|
||||
|
||||
When installing locally, npm first tries to find an appropriate
|
||||
`prefix` folder. This is so that `npm install foo@1.2.3` will install
|
||||
to the sensible root of your package, even if you happen to have `cd`ed
|
||||
into some other folder.
|
||||
|
||||
Starting at the $PWD, npm will walk up the folder tree checking for a
|
||||
folder that contains either a `package.json` file, or a `node_modules`
|
||||
folder. If such a thing is found, then that is treated as the effective
|
||||
"current directory" for the purpose of running npm commands. (This
|
||||
behavior is inspired by and similar to git's .git-folder seeking
|
||||
logic when running git commands in a working dir.)
|
||||
|
||||
If no package root is found, then the current folder is used.
|
||||
|
||||
When you run `npm install foo@1.2.3`, then the package is loaded into
|
||||
the cache, and then unpacked into `./node_modules/foo`. Then, any of
|
||||
foo's dependencies are similarly unpacked into
|
||||
`./node_modules/foo/node_modules/...`.
|
||||
|
||||
Any bin files are symlinked to `./node_modules/.bin/`, so that they may
|
||||
be found by npm scripts when necessary.
|
||||
|
||||
### Global Installation
|
||||
|
||||
If the `global` configuration is set to true, then npm will
|
||||
install packages "globally".
|
||||
|
||||
For global installation, packages are installed roughly the same way,
|
||||
but using the folders described above.
|
||||
|
||||
### Cycles, Conflicts, and Folder Parsimony
|
||||
|
||||
Cycles are handled using the property of node's module system that it
|
||||
walks up the directories looking for `node_modules` folders. So, at every
|
||||
stage, if a package is already installed in an ancestor `node_modules`
|
||||
folder, then it is not installed at the current location.
|
||||
|
||||
Consider the case above, where `foo -> bar -> baz`. Imagine if, in
|
||||
addition to that, baz depended on bar, so you'd have:
|
||||
`foo -> bar -> baz -> bar -> baz ...`. However, since the folder
|
||||
structure is: `foo/node_modules/bar/node_modules/baz`, there's no need to
|
||||
put another copy of bar into `.../baz/node_modules`, since when it calls
|
||||
require("bar"), it will get the copy that is installed in
|
||||
`foo/node_modules/bar`.
|
||||
|
||||
This shortcut is only used if the exact same
|
||||
version would be installed in multiple nested `node_modules` folders. It
|
||||
is still possible to have `a/node_modules/b/node_modules/a` if the two
|
||||
"a" packages are different versions. However, without repeating the
|
||||
exact same package multiple times, an infinite regress will always be
|
||||
prevented.
|
||||
|
||||
Another optimization can be made by installing dependencies at the
|
||||
highest level possible, below the localized "target" folder.
|
||||
|
||||
#### Example
|
||||
|
||||
Consider this dependency graph:
|
||||
|
||||
foo
|
||||
+-- blerg@1.2.5
|
||||
+-- bar@1.2.3
|
||||
| +-- blerg@1.x (latest=1.3.7)
|
||||
| +-- baz@2.x
|
||||
| | `-- quux@3.x
|
||||
| | `-- bar@1.2.3 (cycle)
|
||||
| `-- asdf@*
|
||||
`-- baz@1.2.3
|
||||
`-- quux@3.x
|
||||
`-- bar
|
||||
|
||||
In this case, we might expect a folder structure like this:
|
||||
|
||||
foo
|
||||
+-- node_modules
|
||||
+-- blerg (1.2.5) <---[A]
|
||||
+-- bar (1.2.3) <---[B]
|
||||
| +-- node_modules
|
||||
| | `-- baz (2.0.2) <---[C]
|
||||
| | `-- node_modules
|
||||
| | `-- quux (3.2.0)
|
||||
| `-- asdf (2.3.4)
|
||||
`-- baz (1.2.3) <---[D]
|
||||
`-- node_modules
|
||||
`-- quux (3.2.0) <---[E]
|
||||
|
||||
Since foo depends directly on bar@1.2.3 and baz@1.2.3, those are
|
||||
installed in foo's `node_modules` folder.
|
||||
|
||||
Even though the latest copy of blerg is 1.3.7, foo has a specific
|
||||
dependency on version 1.2.5. So, that gets installed at [A]. Since the
|
||||
parent installation of blerg satisfie's bar's dependency on blerg@1.x,
|
||||
it does not install another copy under [B].
|
||||
|
||||
Bar [B] also has dependencies on baz and asdf, so those are installed in
|
||||
bar's `node_modules` folder. Because it depends on `baz@2.x`, it cannot
|
||||
re-use the `baz@1.2.3` installed in the parent `node_modules` folder [D],
|
||||
and must install its own copy [C].
|
||||
|
||||
Underneath bar, the `baz->quux->bar` dependency creates a cycle.
|
||||
However, because `bar` is already in `quux`'s ancestry [B], it does not
|
||||
unpack another copy of bar into that folder.
|
||||
|
||||
Underneath `foo->baz` [D], quux's [E] folder tree is empty, because its
|
||||
dependency on bar is satisfied by the parent folder copy installed at [B].
|
||||
|
||||
For a graphical breakdown of what is installed where, use `npm ls`.
|
||||
|
||||
### Publishing
|
||||
|
||||
Upon publishing, npm will look in the `node_modules` folder. If any of
|
||||
the items there are not in the `bundledDependencies` array, then they will
|
||||
not be included in the package tarball.
|
||||
|
||||
This allows a package maintainer to install all of their dependencies
|
||||
(and dev dependencies) locally, but only re-publish those items that
|
||||
cannot be found elsewhere. See `npm-json(1)` for more information.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
* npm-faq(1)
|
||||
* npm-json(1)
|
||||
* npm-install(1)
|
||||
* npm-pack(1)
|
||||
* npm-cache(1)
|
||||
* npm-config(1)
|
||||
* npm-publish(1)
|
||||
18
deps/npm/doc/cli/index.md
vendored
18
deps/npm/doc/cli/index.md
vendored
@@ -46,10 +46,6 @@ npm-index(1) -- Index of all npm documentation
|
||||
|
||||
Manage the npm configuration file
|
||||
|
||||
## npm-dedupe(1)
|
||||
|
||||
Reduce duplication
|
||||
|
||||
## npm-deprecate(1)
|
||||
|
||||
Deprecate a version of a package
|
||||
@@ -82,10 +78,6 @@ npm-index(1) -- Index of all npm documentation
|
||||
|
||||
Folder Structures Used by npm
|
||||
|
||||
## npm-global(1)
|
||||
|
||||
Folder Structures Used by npm
|
||||
|
||||
## npm-help-search(1)
|
||||
|
||||
Search npm help documentation
|
||||
@@ -110,7 +102,7 @@ npm-index(1) -- Index of all npm documentation
|
||||
|
||||
Symlink a package folder
|
||||
|
||||
## npm-ls(1)
|
||||
## npm-list(1)
|
||||
|
||||
List installed packages
|
||||
|
||||
@@ -158,10 +150,6 @@ npm-index(1) -- Index of all npm documentation
|
||||
|
||||
Start a package
|
||||
|
||||
## npm-rm(1)
|
||||
|
||||
Remove a package
|
||||
|
||||
## npm-root(1)
|
||||
|
||||
Display npm root
|
||||
@@ -190,10 +178,6 @@ npm-index(1) -- Index of all npm documentation
|
||||
|
||||
Mark your favorite packages
|
||||
|
||||
## npm-stars(1)
|
||||
|
||||
View packages marked as favorites
|
||||
|
||||
## npm-start(1)
|
||||
|
||||
Start a package
|
||||
|
||||
9
deps/npm/doc/cli/install.md
vendored
9
deps/npm/doc/cli/install.md
vendored
@@ -165,15 +165,6 @@ rather than locally. See `npm-folders(1)`.
|
||||
The `--link` argument will cause npm to link global installs into the
|
||||
local space in some cases.
|
||||
|
||||
The `--no-bin-links` argument will prevent npm from creating symlinks for
|
||||
any binaries the package might contain.
|
||||
|
||||
The `--no-shrinkwrap` argument, which will ignore an available
|
||||
shrinkwrap file and use the package.json instead.
|
||||
|
||||
The `--nodedir=/path/to/node/source` argument will allow npm to find the
|
||||
node source code so that npm can compile native modules.
|
||||
|
||||
See `npm-config(1)`. Many of the configuration params have some
|
||||
effect on installation, since that's most of what npm does.
|
||||
|
||||
|
||||
36
deps/npm/doc/cli/json.md
vendored
36
deps/npm/doc/cli/json.md
vendored
@@ -23,11 +23,6 @@ npm will default some values based on package contents.
|
||||
If there is a `wscript` file in the root of your package, npm will
|
||||
default the `preinstall` command to compile using node-waf.
|
||||
|
||||
* `"scripts":{"preinstall": "node-gyp rebuild"}`
|
||||
|
||||
If there is a `binding.gyp` file in the root of your package, npm will
|
||||
default the `preinstall` command to compile using node-gyp.
|
||||
|
||||
* `"contributors": [...]`
|
||||
|
||||
If there is an `AUTHORS` file in the root of your package, npm will
|
||||
@@ -118,27 +113,6 @@ you can specify the value for "bugs" as a simple string instead of an object.
|
||||
|
||||
If a url is provided, it will be used by the `npm bugs` command.
|
||||
|
||||
## license
|
||||
|
||||
You should specify a license for your package so that people know how they are
|
||||
permitted to use it, and any restrictions you're placing on it.
|
||||
|
||||
The simplest way, assuming you're using a common license such as BSD or MIT, is
|
||||
to just specify the name of the license you're using, like this:
|
||||
|
||||
{ "license" : "BSD" }
|
||||
|
||||
If you have more complex licensing terms, or you want to provide more detail
|
||||
in your package.json file, you can use the more verbose plural form, like this:
|
||||
|
||||
"licenses" : [
|
||||
{ "type" : "MyLicense"
|
||||
, "url" : "http://github.com/owner/project/path/to/license"
|
||||
}
|
||||
]
|
||||
|
||||
It's also a good idea to include a license file at the top level in your package.
|
||||
|
||||
## people fields: author, contributors
|
||||
|
||||
The "author" is one person. "contributors" is an array of people. A "person"
|
||||
@@ -387,8 +361,8 @@ a version in the following fashion.
|
||||
For example, the following are equivalent:
|
||||
|
||||
* `"~1.2.3" = ">=1.2.3 <1.3.0"`
|
||||
* `"~1.2" = ">=1.2.0 <1.3.0"`
|
||||
* `"~1" = ">=1.0.0 <1.1.0"`
|
||||
* `"~1.2" = ">=1.2.0 <2.0.0"`
|
||||
* `"~1" = ">=1.0.0 <2.0.0"`
|
||||
|
||||
### X Version Ranges
|
||||
|
||||
@@ -437,9 +411,9 @@ In this case, it's best to list these additional items in a
|
||||
`devDependencies` hash.
|
||||
|
||||
These things will be installed whenever the `--dev` configuration flag
|
||||
is set. This flag is set automatically when doing `npm link` or when doing
|
||||
`npm install` from the root of a package, and can be managed like any other npm
|
||||
configuration param. See `npm-config(1)` for more on the topic.
|
||||
is set. This flag is set automatically when doing `npm link`, and can
|
||||
be managed like any other npm configuration param. See `npm-config(1)`
|
||||
for more on the topic.
|
||||
|
||||
## bundledDependencies
|
||||
|
||||
|
||||
3
deps/npm/doc/cli/link.md
vendored
3
deps/npm/doc/cli/link.md
vendored
@@ -16,9 +16,6 @@ symbolic link from `prefix/package-name` to the current folder.
|
||||
Next, in some other location, `npm link package-name` will create a
|
||||
symlink from the local `node_modules` folder to the global symlink.
|
||||
|
||||
Note that `package-name` is taken from `package.json` ,
|
||||
not from directory name.
|
||||
|
||||
When creating tarballs for `npm publish`, the linked packages are
|
||||
"snapshotted" to their current state by resolving the symbolic links.
|
||||
|
||||
|
||||
2
deps/npm/doc/cli/npm.md
vendored
2
deps/npm/doc/cli/npm.md
vendored
@@ -64,7 +64,7 @@ following help topics:
|
||||
Especially, installing other peoples code from the registry is done via
|
||||
`npm install`
|
||||
* adduser:
|
||||
Create an account or log in. Credentials are stored in the
|
||||
Create an account or log in. Creditials are stored in the
|
||||
user config file.
|
||||
* publish:
|
||||
Use the `npm publish` command to upload your code to the registry.
|
||||
|
||||
4
deps/npm/doc/cli/registry.md
vendored
4
deps/npm/doc/cli/registry.md
vendored
@@ -82,7 +82,9 @@ ask for help on the <npm-@googlegroups.com> mailing list.
|
||||
|
||||
## Is there a website or something to see package docs and such?
|
||||
|
||||
Yes, head over to <https://npmjs.org/>
|
||||
No, but such a thing is planned, and a tiny bit developed.
|
||||
|
||||
Stay tuned!
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
|
||||
19
deps/npm/doc/cli/rm.md
vendored
19
deps/npm/doc/cli/rm.md
vendored
@@ -1,19 +0,0 @@
|
||||
npm-rm(1) -- Remove a package
|
||||
=============================
|
||||
|
||||
## SYNOPSIS
|
||||
|
||||
npm rm <name>
|
||||
npm uninstall <name>
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
This uninstalls a package, completely removing everything npm installed
|
||||
on its behalf.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
* npm-prune(1)
|
||||
* npm-install(1)
|
||||
* npm-folders(1)
|
||||
* npm-config(1)
|
||||
53
deps/npm/doc/cli/scripts.md
vendored
53
deps/npm/doc/cli/scripts.md
vendored
@@ -6,11 +6,6 @@ npm-scripts(1) -- How npm handles the "scripts" field
|
||||
npm supports the "scripts" member of the package.json script, for the
|
||||
following scripts:
|
||||
|
||||
* prepublish:
|
||||
Run BEFORE the package is published. (Also run on local `npm
|
||||
install` without any arguments.)
|
||||
* publish, postpublish:
|
||||
Run AFTER the package is published.
|
||||
* preinstall:
|
||||
Run BEFORE the package is installed
|
||||
* install, postinstall:
|
||||
@@ -23,6 +18,10 @@ following scripts:
|
||||
Run BEFORE the package is updated with the update command.
|
||||
* update, postupdate:
|
||||
Run AFTER the package is updated with the update command.
|
||||
* prepublish:
|
||||
Run BEFORE the package is published.
|
||||
* publish, postpublish:
|
||||
Run AFTER the package is published.
|
||||
* pretest, test, posttest:
|
||||
Run by the `npm test` command.
|
||||
* prestop, stop, poststop:
|
||||
@@ -36,50 +35,6 @@ following scripts:
|
||||
Additionally, arbitrary scrips can be run by doing
|
||||
`npm run-script <stage> <pkg>`.
|
||||
|
||||
## NOTE: INSTALL SCRIPTS ARE AN ANTIPATTERN
|
||||
|
||||
**tl;dr** Don't use `install`. Use a `.gyp` file for compilation, and
|
||||
`prepublish` for anything else.
|
||||
|
||||
You should almost never have to explicitly set a `preinstall` or
|
||||
`install` script. If you are doing this, please consider if there is
|
||||
another option.
|
||||
|
||||
The only valid use of `install` or `preinstall` scripts is for
|
||||
compilation which must be done on the target architecture. In early
|
||||
versions of node, this was often done using the `node-waf` scripts, or
|
||||
a standalone `Makefile`, and early versions of npm required that it be
|
||||
explicitly set in package.json. This was not portable, and harder to
|
||||
do properly.
|
||||
|
||||
In the current version of node, the standard way to do this is using a
|
||||
`.gyp` file. If you have a file with a `.gyp` extension in the root
|
||||
of your package, then npm will run the appropriate `node-gyp` commands
|
||||
automatically at install time. This is the only officially supported
|
||||
method for compiling binary addons, and does not require that you add
|
||||
anything to your package.json file.
|
||||
|
||||
If you have to do other things before your package is used, in a way
|
||||
that is not dependent on the operating system or architecture of the
|
||||
target system, then use a `prepublish` script instead. This includes
|
||||
tasks such as:
|
||||
|
||||
* Compile CoffeeScript source code into JavaScript.
|
||||
* Create minified versions of JavaScript source code.
|
||||
* Fetching remote resources that your package will use.
|
||||
|
||||
The advantage of doing these things at `prepublish` time instead of
|
||||
`preinstall` or `install` time is that they can be done once, in a
|
||||
single place, and thus greatly reduce complexity and variability.
|
||||
Additionally, this means that:
|
||||
|
||||
* You can depend on `coffee-script` as a `devDependency`, and thus
|
||||
your users don't need to have it installed.
|
||||
* You don't need to include the minifiers in your package, reducing
|
||||
the size for your users.
|
||||
* You don't need to rely on your users having `curl` or `wget` or
|
||||
other system tools on the target machines.
|
||||
|
||||
## DEFAULT VALUES
|
||||
|
||||
npm will default some script values based on package contents.
|
||||
|
||||
6
deps/npm/doc/cli/semver.md
vendored
6
deps/npm/doc/cli/semver.md
vendored
@@ -11,8 +11,8 @@ As a node module:
|
||||
|
||||
$ npm install semver
|
||||
|
||||
semver.valid('1.2.3') // '1.2.3'
|
||||
semver.valid('a.b.c') // null
|
||||
semver.valid('1.2.3') // true
|
||||
semver.valid('a.b.c') // false
|
||||
semver.clean(' =v1.2.3 ') // '1.2.3'
|
||||
semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
|
||||
semver.gt('1.2.3', '9.8.7') // false
|
||||
@@ -83,7 +83,7 @@ The following range styles are supported:
|
||||
* `<1.2.3` Less than
|
||||
* `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
|
||||
* `~1.2.3` := `>=1.2.3 <1.3.0`
|
||||
* `~1.2` := `>=1.2.0 <1.3.0`
|
||||
* `~1.2` := `>=1.2.0 <2.0.0`
|
||||
* `~1` := `>=1.0.0 <2.0.0`
|
||||
* `1.2.x` := `>=1.2.0 <1.3.0`
|
||||
* `1.x` := `>=1.0.0 <2.0.0`
|
||||
|
||||
178
deps/npm/doc/cli/shrinkwrap.md
vendored
178
deps/npm/doc/cli/shrinkwrap.md
vendored
@@ -7,72 +7,68 @@ npm-shrinkwrap(1) -- Lock down dependency versions
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
This command locks down the versions of a package's dependencies so
|
||||
that you can control exactly which versions of each dependency will be
|
||||
used when your package is installed. The "package.json" file is still
|
||||
required if you want to use "npm install".
|
||||
This command locks down the versions of a package's dependencies so that you can
|
||||
control exactly which versions of each dependency will be used when your package
|
||||
is installed.
|
||||
|
||||
By default, "npm install" recursively installs the target's
|
||||
dependencies (as specified in package.json), choosing the latest
|
||||
available version that satisfies the dependency's semver pattern. In
|
||||
some situations, particularly when shipping software where each change
|
||||
is tightly managed, it's desirable to fully specify each version of
|
||||
each dependency recursively so that subsequent builds and deploys do
|
||||
not inadvertently pick up newer versions of a dependency that satisfy
|
||||
the semver pattern. Specifying specific semver patterns in each
|
||||
dependency's package.json would facilitate this, but that's not always
|
||||
possible or desirable, as when another author owns the npm package.
|
||||
It's also possible to check dependencies directly into source control,
|
||||
but that may be undesirable for other reasons.
|
||||
By default, "npm install" recursively installs the target's dependencies (as
|
||||
specified in package.json), choosing the latest available version that satisfies
|
||||
the dependency's semver pattern. In some situations, particularly when shipping
|
||||
software where each change is tightly managed, it's desirable to fully specify
|
||||
each version of each dependency recursively so that subsequent builds and
|
||||
deploys do not inadvertently pick up newer versions of a dependency that satisfy
|
||||
the semver pattern. Specifying specific semver patterns in each dependency's
|
||||
package.json would facilitate this, but that's not always possible or desirable,
|
||||
as when another author owns the npm package. It's also possible to check
|
||||
dependencies directly into source control, but that may be undesirable for other
|
||||
reasons.
|
||||
|
||||
As an example, consider package A:
|
||||
|
||||
{
|
||||
"name": "A",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"B": "<0.1.0"
|
||||
}
|
||||
"name": "A",
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"B": "<0.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
package B:
|
||||
|
||||
{
|
||||
"name": "B",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"C": "<0.1.0"
|
||||
}
|
||||
"name": "B",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"C": "<0.1.0"
|
||||
}
|
||||
}
|
||||
|
||||
and package C:
|
||||
|
||||
{
|
||||
"name": "C,
|
||||
"version": "0.0.1"
|
||||
"name": "C,
|
||||
"version": "0.0.1"
|
||||
}
|
||||
|
||||
If these are the only versions of A, B, and C available in the
|
||||
registry, then a normal "npm install A" will install:
|
||||
If these are the only versions of A, B, and C available in the registry, then
|
||||
a normal "npm install A" will install:
|
||||
|
||||
A@0.1.0
|
||||
`-- B@0.0.1
|
||||
`-- C@0.0.1
|
||||
|
||||
However, if B@0.0.2 is published, then a fresh "npm install A" will
|
||||
install:
|
||||
However, if B@0.0.2 is published, then a fresh "npm install A" will install:
|
||||
|
||||
A@0.1.0
|
||||
`-- B@0.0.2
|
||||
`-- C@0.0.1
|
||||
|
||||
assuming the new version did not modify B's dependencies. Of course,
|
||||
the new version of B could include a new version of C and any number
|
||||
of new dependencies. If such changes are undesirable, the author of A
|
||||
could specify a dependency on B@0.0.1. However, if A's author and B's
|
||||
author are not the same person, there's no way for A's author to say
|
||||
that he or she does not want to pull in newly published versions of C
|
||||
when B hasn't changed at all.
|
||||
assuming the new version did not modify B's dependencies. Of course, the new
|
||||
version of B could include a new version of C and any number of new
|
||||
dependencies. If such changes are undesirable, the author of A could specify a
|
||||
dependency on B@0.0.1. However, if A's author and B's author are not the same
|
||||
person, there's no way for A's author to say that he or she does not want to
|
||||
pull in newly published versions of C when B hasn't changed at all.
|
||||
|
||||
In this case, A's author can run
|
||||
|
||||
@@ -95,88 +91,78 @@ This generates npm-shrinkwrap.json, which will look something like this:
|
||||
}
|
||||
}
|
||||
|
||||
The shrinkwrap command has locked down the dependencies based on
|
||||
what's currently installed in node_modules. When "npm install"
|
||||
installs a package with a npm-shrinkwrap.json file in the package
|
||||
root, the shrinkwrap file (rather than package.json files) completely
|
||||
drives the installation of that package and all of its dependencies
|
||||
(recursively). So now the author publishes A@0.1.0, and subsequent
|
||||
installs of this package will use B@0.0.1 and C@0.1.0, regardless the
|
||||
dependencies and versions listed in A's, B's, and C's package.json
|
||||
files.
|
||||
The shrinkwrap command has locked down the dependencies based on what's
|
||||
currently installed in node_modules. When "npm install" installs a package with
|
||||
a npm-shrinkwrap.json file in the package root, the shrinkwrap file (rather than
|
||||
package.json files) completely drives the installation of that package and all
|
||||
of its dependencies (recursively). So now the author publishes A@0.1.0, and
|
||||
subsequent installs of this package will use B@0.0.1 and C@0.1.0, regardless the
|
||||
dependencies and versions listed in A's, B's, and C's package.json files.
|
||||
|
||||
|
||||
### Using shrinkwrapped packages
|
||||
|
||||
Using a shrinkwrapped package is no different than using any other
|
||||
package: you can "npm install" it by hand, or add a dependency to your
|
||||
package.json file and "npm install" it.
|
||||
Using a shrinkwrapped package is no different than using any other package: you
|
||||
can "npm install" it by hand, or add a dependency to your package.json file and
|
||||
"npm install" it.
|
||||
|
||||
### Building shrinkwrapped packages
|
||||
|
||||
To shrinkwrap an existing package:
|
||||
|
||||
1. Run "npm install" in the package root to install the current
|
||||
versions of all dependencies.
|
||||
1. Run "npm install" in the package root to install the current versions of all
|
||||
dependencies.
|
||||
2. Validate that the package works as expected with these versions.
|
||||
3. Run "npm shrinkwrap", add npm-shrinkwrap.json to git, and publish
|
||||
your package.
|
||||
3. Run "npm shrinkwrap", add npm-shrinkwrap.json to git, and publish your
|
||||
package.
|
||||
|
||||
To add or update a dependency in a shrinkwrapped package:
|
||||
|
||||
1. Run "npm install" in the package root to install the current
|
||||
versions of all dependencies.
|
||||
2. Add or update dependencies. "npm install" each new or updated
|
||||
package individually and then update package.json. Note that they
|
||||
must be explicitly named in order to be installed: running `npm
|
||||
install` with no arguments will merely reproduce the existing
|
||||
shrinkwrap.
|
||||
3. Validate that the package works as expected with the new
|
||||
1. Run "npm install" in the package root to install the current versions of all
|
||||
dependencies.
|
||||
4. Run "npm shrinkwrap", commit the new npm-shrinkwrap.json, and
|
||||
publish your package.
|
||||
2. Add or update dependencies. "npm install" each new or updated package
|
||||
individually and then update package.json. Note that they must be
|
||||
explicitly named in order to be installed: running `npm install` with
|
||||
no arguments will merely reproduce the existing shrinkwrap.
|
||||
3. Validate that the package works as expected with the new dependencies.
|
||||
4. Run "npm shrinkwrap", commit the new npm-shrinkwrap.json, and publish your
|
||||
package.
|
||||
|
||||
You can use npm-outdated(1) to view dependencies with newer versions
|
||||
available.
|
||||
You can use npm-outdated(1) to view dependencies with newer versions available.
|
||||
|
||||
### Other Notes
|
||||
|
||||
A shrinkwrap file must be consistent with the package's package.json
|
||||
file. "npm shrinkwrap" will fail if required dependencies are not
|
||||
already installed, since that would result in a shrinkwrap that
|
||||
wouldn't actually work. Similarly, the command will fail if there are
|
||||
extraneous packages (not referenced by package.json), since that would
|
||||
indicate that package.json is not correct.
|
||||
Since "npm shrinkwrap" uses the locally installed packages to construct the
|
||||
shrinkwrap file, devDependencies will be included if and only if you've
|
||||
installed them already when you make the shrinkwrap.
|
||||
|
||||
Since "npm shrinkwrap" is intended to lock down your dependencies for
|
||||
production use, `devDependencies` will not be included unless you
|
||||
explicitly set the `--dev` flag when you run `npm shrinkwrap`. If
|
||||
installed `devDependencies` are excluded, then npm will print a
|
||||
warning. If you want them to be installed with your module by
|
||||
default, please consider adding them to `dependencies` instead.
|
||||
A shrinkwrap file must be consistent with the package's package.json file. "npm
|
||||
shrinkwrap" will fail if required dependencies are not already installed, since
|
||||
that would result in a shrinkwrap that wouldn't actually work. Similarly, the
|
||||
command will fail if there are extraneous packages (not referenced by
|
||||
package.json), since that would indicate that package.json is not correct.
|
||||
|
||||
If shrinkwrapped package A depends on shrinkwrapped package B, B's
|
||||
shrinkwrap will not be used as part of the installation of A. However,
|
||||
because A's shrinkwrap is constructed from a valid installation of B
|
||||
and recursively specifies all dependencies, the contents of B's
|
||||
shrinkwrap will implicitly be included in A's shrinkwrap.
|
||||
If shrinkwrapped package A depends on shrinkwrapped package B, B's shrinkwrap
|
||||
will not be used as part of the installation of A. However, because A's
|
||||
shrinkwrap is constructed from a valid installation of B and recursively
|
||||
specifies all dependencies, the contents of B's shrinkwrap will implicitly be
|
||||
included in A's shrinkwrap.
|
||||
|
||||
### Caveats
|
||||
|
||||
Shrinkwrap files only lock down package versions, not actual package
|
||||
contents. While discouraged, a package author can republish an
|
||||
existing version of a package, causing shrinkwrapped packages using
|
||||
that version to pick up different code than they were before. If you
|
||||
want to avoid any risk that a byzantine author replaces a package
|
||||
you're using with code that breaks your application, you could modify
|
||||
the shrinkwrap file to use git URL references rather than version
|
||||
numbers so that npm always fetches all packages from git.
|
||||
Shrinkwrap files only lock down package versions, not actual package contents.
|
||||
While discouraged, a package author can republish an existing version of a
|
||||
package, causing shrinkwrapped packages using that version to pick up different
|
||||
code than they were before. If you want to avoid any risk that a byzantine
|
||||
author replaces a package you're using with code that breaks your application,
|
||||
you could modify the shrinkwrap file to use git URL references rather than
|
||||
version numbers so that npm always fetches all packages from git.
|
||||
|
||||
If you wish to lock down the specific bytes included in a package, for
|
||||
example to have 100% confidence in being able to reproduce a
|
||||
deployment or build, then you ought to check your dependencies into
|
||||
source control, or pursue some other mechanism that can verify
|
||||
contents rather than versions.
|
||||
example to have 100% confidence in being able to reproduce a deployment
|
||||
or build, then you ought to check your dependencies into source control,
|
||||
or pursue some other mechanism that can verify contents rather than
|
||||
versions.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
|
||||
22
deps/npm/doc/cli/stars.md
vendored
22
deps/npm/doc/cli/stars.md
vendored
@@ -1,22 +0,0 @@
|
||||
npm-stars(1) -- View packages marked as favorites
|
||||
=================================================
|
||||
|
||||
## SYNOPSIS
|
||||
|
||||
npm stars
|
||||
npm stars [username]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
If you have starred a lot of neat things and want to find them again
|
||||
quickly this command lets you do just that.
|
||||
|
||||
You may also want to see your friend's favorite packages, in this case
|
||||
you will most certainly enjoy this command.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
* npm-star(1)
|
||||
* npm-view(1)
|
||||
* npm-whoami(1)
|
||||
* npm-adduser(1)
|
||||
5
deps/npm/doc/cli/update.md
vendored
5
deps/npm/doc/cli/update.md
vendored
@@ -3,7 +3,7 @@ npm-update(1) -- Update a package
|
||||
|
||||
## SYNOPSIS
|
||||
|
||||
npm update [-g] [<name> [<name> ...]]
|
||||
npm update [<name> [<name> ...]]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
@@ -12,9 +12,6 @@ This command will update all the packages listed to the latest version
|
||||
|
||||
It will also install missing packages.
|
||||
|
||||
If the `-g` flag is specified, this command will update globally installed packages.
|
||||
If no package name is specified, all packages in the specified location (global or local) will be updated.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
* npm-install(1)
|
||||
|
||||
28
deps/npm/doc/cli/version.md
vendored
28
deps/npm/doc/cli/version.md
vendored
@@ -3,7 +3,7 @@ npm-version(1) -- Bump a package version
|
||||
|
||||
## SYNOPSIS
|
||||
|
||||
npm version [<newversion> | major | minor | patch | build]
|
||||
npm version <newversion> [--message commit-message]
|
||||
|
||||
## DESCRIPTION
|
||||
|
||||
@@ -11,32 +11,14 @@ Run this in a package directory to bump the version and write the new
|
||||
data back to the package.json file.
|
||||
|
||||
The `newversion` argument should be a valid semver string, *or* a valid
|
||||
second argument to semver.inc (one of "build", "patch", "minor", or
|
||||
"major"). In the second case, the existing version will be incremented
|
||||
by 1 in the specified field.
|
||||
second argument to semver.inc (one of "patch", "minor", or "major"). In
|
||||
the second case, the existing version will be incremented by that amount.
|
||||
|
||||
If run in a git repo, it will also create a version commit and tag, and
|
||||
fail if the repo is not clean.
|
||||
|
||||
If supplied with `--message` (shorthand: `-m`) config option, npm will
|
||||
use it as a commit message when creating a version commit. If the
|
||||
`message` config contains `%s` then that will be replaced with the
|
||||
resulting version number. For example:
|
||||
|
||||
npm version patch -m "Upgrade to %s for reasons"
|
||||
|
||||
If the `sign-git-tag` config is set, then the tag will be signed using
|
||||
the `-s` flag to git. Note that you must have a default GPG key set up
|
||||
in your git config for this to work properly. For example:
|
||||
|
||||
$ npm config set sign-git-tag true
|
||||
$ npm version patch
|
||||
|
||||
You need a passphrase to unlock the secret key for
|
||||
user: "isaacs (http://blog.izs.me/) <i@izs.me>"
|
||||
2048-bit RSA key, ID 6C481CF6, created 2010-08-31
|
||||
|
||||
Enter passphrase:
|
||||
If supplied with `--message` (shorthand: `-m`) command line option, npm
|
||||
will use it as a commit message when creating a version commit.
|
||||
|
||||
## SEE ALSO
|
||||
|
||||
|
||||
4
deps/npm/doc/cli/view.md
vendored
4
deps/npm/doc/cli/view.md
vendored
@@ -69,9 +69,7 @@ was required by each matching version of yui3:
|
||||
|
||||
If only a single string field for a single version is output, then it
|
||||
will not be colorized or quoted, so as to enable piping the output to
|
||||
another command. If the field is an object, it will be output as a JavaScript object literal.
|
||||
|
||||
If the --json flag is given, the outputted fields will be JSON.
|
||||
another command.
|
||||
|
||||
If the version range matches multiple versions, than each printed value
|
||||
will be prefixed with the version it applies to.
|
||||
|
||||
4
deps/npm/html/api/bin.html
vendored
4
deps/npm/html/api/bin.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>bin</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -19,7 +19,7 @@
|
||||
<p>This function should not be used programmatically. Instead, just refer
|
||||
to the <code>npm.bin</code> member.</p>
|
||||
</div>
|
||||
<p id="footer">bin — npm@1.2.30</p>
|
||||
<p id="footer">bin — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/bugs.html
vendored
6
deps/npm/html/api/bugs.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>bugs</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This command tries to guess at the likely location of a package's
|
||||
<p>This command tries to guess at the likely location of a package's
|
||||
bug tracker URL, and then tries to open it using the <code>--browser</code>
|
||||
config param.</p>
|
||||
|
||||
@@ -25,7 +25,7 @@ optional version number.</p>
|
||||
<p>This command will launch a browser, so this command may not be the most
|
||||
friendly for programmatic use.</p>
|
||||
</div>
|
||||
<p id="footer">bugs — npm@1.2.30</p>
|
||||
<p id="footer">bugs — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
4
deps/npm/html/api/commands.html
vendored
4
deps/npm/html/api/commands.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>commands</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -28,7 +28,7 @@ usage, or <code>man 3 npm-<command></code> for programmatic usage.</p>
|
||||
|
||||
<ul><li><a href="../doc/index.html">index(1)</a></li></ul>
|
||||
</div>
|
||||
<p id="footer">commands — npm@1.2.30</p>
|
||||
<p id="footer">commands — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/config.html
vendored
6
deps/npm/html/api/config.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>config</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -22,7 +22,7 @@ element in the array tells config what to do. Possible values are:</p>
|
||||
<ul><li><p><code>set</code></p><p>Sets a config parameter. The second element in <code>args</code> is interpreted as the
|
||||
key, and the third element is interpreted as the value.</p></li><li><p><code>get</code></p><p>Gets the value of a config parameter. The second element in <code>args</code> is the
|
||||
key to get the value of.</p></li><li><p><code>delete</code> (<code>rm</code> or <code>del</code>)</p><p>Deletes a parameter from the config. The second element in <code>args</code> is the
|
||||
key to delete.</p></li><li><p><code>list</code> (<code>ls</code>)</p><p>Show all configs that aren't secret. No parameters necessary.</p></li><li><p><code>edit</code>:</p><p>Opens the config file in the default editor. This command isn't very useful
|
||||
key to delete.</p></li><li><p><code>list</code> (<code>ls</code>)</p><p>Show all configs that aren't secret. No parameters necessary.</p></li><li><p><code>edit</code>:</p><p>Opens the config file in the default editor. This command isn't very useful
|
||||
programmatically, but it is made available.</p></li></ul>
|
||||
|
||||
<p>To programmatically access npm configuration settings, or set them for
|
||||
@@ -33,7 +33,7 @@ functions instead.</p>
|
||||
|
||||
<ul><li><a href="../api/npm.html">npm(3)</a></li></ul>
|
||||
</div>
|
||||
<p id="footer">config — npm@1.2.30</p>
|
||||
<p id="footer">config — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/deprecate.html
vendored
8
deps/npm/html/api/deprecate.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>deprecate</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -17,7 +17,7 @@
|
||||
<p>This command will update the npm registry entry for a package, providing
|
||||
a deprecation warning to all who attempt to install it.</p>
|
||||
|
||||
<p>The 'args' parameter must have exactly two elements:</p>
|
||||
<p>The 'args' parameter must have exactly two elements:</p>
|
||||
|
||||
<ul><li><p><code>package[@version]</code></p><p>The <code>version</code> portion is optional, and may be either a range, or a
|
||||
specific version, or a tag.</p></li><li><p><code>message</code></p><p>The warning message that will be printed whenever a user attempts to
|
||||
@@ -26,13 +26,11 @@ install the package.</p></li></ul>
|
||||
<p>Note that you must be the package owner to deprecate something. See the
|
||||
<code>owner</code> and <code>adduser</code> help topics.</p>
|
||||
|
||||
<p>To un-deprecate a package, specify an empty string (<code>""</code>) for the <code>message</code> argument.</p>
|
||||
|
||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||
|
||||
<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../api/unpublish.html">unpublish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
|
||||
</div>
|
||||
<p id="footer">deprecate — npm@1.2.30</p>
|
||||
<p id="footer">deprecate — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/docs.html
vendored
6
deps/npm/html/api/docs.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>docs</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This command tries to guess at the likely location of a package's
|
||||
<p>This command tries to guess at the likely location of a package's
|
||||
documentation URL, and then tries to open it using the <code>--browser</code>
|
||||
config param.</p>
|
||||
|
||||
@@ -25,7 +25,7 @@ optional version number.</p>
|
||||
<p>This command will launch a browser, so this command may not be the most
|
||||
friendly for programmatic use.</p>
|
||||
</div>
|
||||
<p id="footer">docs — npm@1.2.30</p>
|
||||
<p id="footer">docs — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/edit.html
vendored
8
deps/npm/html/api/edit.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>edit</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,14 +14,14 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>Opens the package folder in the default editor (or whatever you've
|
||||
<p>Opens the package folder in the default editor (or whatever you've
|
||||
configured as the npm <code>editor</code> config -- see <code>npm help config</code>.)</p>
|
||||
|
||||
<p>After it has been edited, the package is rebuilt so as to pick up any
|
||||
changes in compiled packages.</p>
|
||||
|
||||
<p>For instance, you can do <code>npm install connect</code> to install connect
|
||||
into your package, and then <code>npm.commands.edit(["connect"], callback)</code>
|
||||
into your package, and then <code>npm.commands.edit(["connect"], callback)</code>
|
||||
to make a few changes to your locally installed copy.</p>
|
||||
|
||||
<p>The first parameter is a string array with a single element, the package
|
||||
@@ -30,7 +30,7 @@ to open. The package can optionally have a version number attached.</p>
|
||||
<p>Since this command opens an editor in a new process, be careful about where
|
||||
and how this is used.</p>
|
||||
</div>
|
||||
<p id="footer">edit — npm@1.2.30</p>
|
||||
<p id="footer">edit — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/explore.html
vendored
6
deps/npm/html/api/explore.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>explore</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -22,9 +22,9 @@ immediately terminates.</p>
|
||||
<p>Note that the package is <em>not</em> automatically rebuilt afterwards, so be
|
||||
sure to use <code>npm rebuild <pkg></code> if you make any changes.</p>
|
||||
|
||||
<p>The first element in the 'args' parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
|
||||
<p>The first element in the 'args' parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command.</p>
|
||||
</div>
|
||||
<p id="footer">explore — npm@1.2.30</p>
|
||||
<p id="footer">explore — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/help-search.html
vendored
6
deps/npm/html/api/help-search.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>help-search</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -24,7 +24,7 @@ are multiple results, the results are printed to the screen formatted and the
|
||||
array of results is returned. Each result is an object with these properties:</p>
|
||||
|
||||
<ul><li>hits:
|
||||
A map of args to number of hits on that arg. For example, {"npm": 3}</li><li>found:
|
||||
A map of args to number of hits on that arg. For example, {"npm": 3}</li><li>found:
|
||||
Total number of unique args that matched.</li><li>totalHits:
|
||||
Total number of hits.</li><li>lines:
|
||||
An array of all matching lines (and some adjacent lines).</li><li>file:
|
||||
@@ -32,7 +32,7 @@ Name of the file that matched</li></ul>
|
||||
|
||||
<p>The silent parameter is not neccessary not used, but it may in the future.</p>
|
||||
</div>
|
||||
<p id="footer">help-search — npm@1.2.30</p>
|
||||
<p id="footer">help-search — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
12
deps/npm/html/api/init.html
vendored
12
deps/npm/html/api/init.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>init</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -17,25 +17,25 @@
|
||||
<p>This will ask you a bunch of questions, and then write a package.json for you.</p>
|
||||
|
||||
<p>It attempts to make reasonable guesses about what you want things to be set to,
|
||||
and then writes a package.json file with the options you've selected.</p>
|
||||
and then writes a package.json file with the options you've selected.</p>
|
||||
|
||||
<p>If you already have a package.json file, it'll read that first, and default to
|
||||
<p>If you already have a package.json file, it'll read that first, and default to
|
||||
the options in there.</p>
|
||||
|
||||
<p>It is strictly additive, so it does not delete options from your package.json
|
||||
without a really good reason to do so.</p>
|
||||
|
||||
<p>Since this function expects to be run on the command-line, it doesn't work very
|
||||
<p>Since this function expects to be run on the command-line, it doesn't work very
|
||||
well as a programmatically. The best option is to roll your own, and since
|
||||
JavaScript makes it stupid simple to output formatted JSON, that is the
|
||||
preferred method. If you're sure you want to handle command-line prompting,
|
||||
preferred method. If you're sure you want to handle command-line prompting,
|
||||
then go ahead and use this programmatically.</p>
|
||||
|
||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||
|
||||
<p><a href="../doc/json.html">json(1)</a></p>
|
||||
</div>
|
||||
<p id="footer">init — npm@1.2.30</p>
|
||||
<p id="footer">init — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
10
deps/npm/html/api/install.html
vendored
10
deps/npm/html/api/install.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>install</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -16,16 +16,16 @@
|
||||
|
||||
<p>This acts much the same ways as installing on the command-line.</p>
|
||||
|
||||
<p>The 'where' parameter is optional and only used internally, and it specifies
|
||||
<p>The 'where' parameter is optional and only used internally, and it specifies
|
||||
where the packages should be installed to.</p>
|
||||
|
||||
<p>The 'packages' parameter is an array of strings. Each element in the array is
|
||||
<p>The 'packages' parameter is an array of strings. Each element in the array is
|
||||
the name of a package to be installed.</p>
|
||||
|
||||
<p>Finally, 'callback' is a function that will be called when all packages have been
|
||||
<p>Finally, 'callback' is a function that will be called when all packages have been
|
||||
installed or when an error has been encountered.</p>
|
||||
</div>
|
||||
<p id="footer">install — npm@1.2.30</p>
|
||||
<p id="footer">install — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/link.html
vendored
8
deps/npm/html/api/link.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>link</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -24,7 +24,7 @@ symbolic link from <code>prefix/package-name</code> to the current folder.</p>
|
||||
folder to the global symlink.</p>
|
||||
|
||||
<p>When creating tarballs for <code>npm publish</code>, the linked packages are
|
||||
"snapshotted" to their current state by resolving the symbolic links.</p>
|
||||
"snapshotted" to their current state by resolving the symbolic links.</p>
|
||||
|
||||
<p>This is
|
||||
handy for installing your own stuff, so that you can work on it and test it
|
||||
@@ -34,12 +34,12 @@ iteratively without having to continually rebuild.</p>
|
||||
|
||||
<pre><code>npm.commands.link(cb) # creates global link from the cwd
|
||||
# (say redis package)
|
||||
npm.commands.link('redis', cb) # link-install the package</code></pre>
|
||||
npm.commands.link('redis', cb) # link-install the package</code></pre>
|
||||
|
||||
<p>Now, any changes to the redis package will be reflected in
|
||||
the package in the current working directory</p>
|
||||
</div>
|
||||
<p id="footer">link — npm@1.2.30</p>
|
||||
<p id="footer">link — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/load.html
vendored
6
deps/npm/html/api/load.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>load</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -27,12 +27,12 @@ config object.</p>
|
||||
<p>For example, to emulate the --dev flag, pass an object that looks like this:</p>
|
||||
|
||||
<pre><code>{
|
||||
"dev": true
|
||||
"dev": true
|
||||
}</code></pre>
|
||||
|
||||
<p>For a list of all the available command-line configs, see <code>npm help config</code></p>
|
||||
</div>
|
||||
<p id="footer">load — npm@1.2.30</p>
|
||||
<p id="footer">load — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/ls.html
vendored
8
deps/npm/html/api/ls.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>ls</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -30,7 +30,7 @@ but the data will still be returned.</p>
|
||||
|
||||
<p>Callback is provided an error if one occurred, the full data about which
|
||||
packages are installed and which dependencies they will receive, and a
|
||||
"lite" data object which just shows which versions are installed where.
|
||||
"lite" data object which just shows which versions are installed where.
|
||||
Note that the full data object is a circular structure, so care must be
|
||||
taken if it is serialized to JSON.</p>
|
||||
|
||||
@@ -55,11 +55,11 @@ taken if it is serialized to JSON.</p>
|
||||
<p>List packages in the global install prefix instead of in the current
|
||||
project.</p>
|
||||
|
||||
<p>Note, if parseable is set or long isn't set, then duplicates will be trimmed.
|
||||
<p>Note, if parseable is set or long isn't set, then duplicates will be trimmed.
|
||||
This means that if a submodule a same dependency as a parent module, then the
|
||||
dependency will only be output once.</p>
|
||||
</div>
|
||||
<p id="footer">ls — npm@1.2.30</p>
|
||||
<p id="footer">ls — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
41
deps/npm/html/api/npm.html
vendored
41
deps/npm/html/api/npm.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>npm</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -10,21 +10,21 @@
|
||||
|
||||
<h2 id="SYNOPSIS">SYNOPSIS</h2>
|
||||
|
||||
<pre><code>var npm = require("npm")
|
||||
npm.load([configObject,] function (er, npm) {
|
||||
// use the npm object, now that it's loaded.
|
||||
<pre><code>var npm = require("npm")
|
||||
npm.load(configObject, function (er, npm) {
|
||||
// use the npm object, now that it's loaded.
|
||||
|
||||
npm.config.set(key, val)
|
||||
val = npm.config.get(key)
|
||||
|
||||
console.log("prefix = %s", npm.prefix)
|
||||
console.log("prefix = %s", npm.prefix)
|
||||
|
||||
npm.commands.install(["package"], cb)
|
||||
npm.commands.install(["package"], cb)
|
||||
})</code></pre>
|
||||
|
||||
<h2 id="VERSION">VERSION</h2>
|
||||
|
||||
<p>1.2.30</p>
|
||||
<p>1.1.37</p>
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
@@ -32,13 +32,12 @@ npm.load([configObject,] function (er, npm) {
|
||||
To find documentation of the command line
|
||||
client, see <code><a href="../doc/npm.html">npm(1)</a></code>.</p>
|
||||
|
||||
<p>Prior to using npm's commands, <code>npm.load()</code> must be called.
|
||||
If you provide <code>configObject</code> as an object hash of top-level
|
||||
configs, they override the values stored in the various config
|
||||
locations. In the npm command line client, this set of configs
|
||||
is parsed from the command line options. Additional configuration
|
||||
params are loaded from two configuration files. See <code><a href="../doc/config.html">config(1)</a></code>
|
||||
for more information.</p>
|
||||
<p>Prior to using npm's commands,
|
||||
<code>npm.load()</code> must be called with an object hash of
|
||||
top-level configs. In the npm command line client,
|
||||
this set of configs is parsed from the command line options. Additional
|
||||
configuration params are loaded from two configuration files. See
|
||||
<code><a href="../doc/config.html">config(1)</a></code> for more information.</p>
|
||||
|
||||
<p>After that, each of the functions are accessible in the
|
||||
commands object: <code>npm.commands.<cmd></code>. See <code><a href="../doc/index.html">index(1)</a></code> for a list of
|
||||
@@ -58,9 +57,9 @@ command.</p>
|
||||
|
||||
<ul><li><p><code>npm.load(configs, cb)</code></p><p>Load the configuration params, and call the <code>cb</code> function once the
|
||||
globalconfig and userconfig files have been loaded as well, or on
|
||||
nextTick if they've already been loaded.</p></li><li><p><code>npm.config</code></p><p>An object for accessing npm configuration parameters.</p><ul><li><p><code>npm.config.get(key)</code></p></li><li><code>npm.config.set(key, val)</code></li><li><p><code>npm.config.del(key)</code></p></li></ul></li><li><p><code>npm.dir</code> or <code>npm.root</code></p><p>The <code>node_modules</code> directory where npm will operate.</p></li><li><p><code>npm.prefix</code></p><p>The prefix where npm is operating. (Most often the current working
|
||||
nextTick if they've already been loaded.</p></li><li><p><code>npm.config</code></p><p>An object for accessing npm configuration parameters.</p><ul><li><p><code>npm.config.get(key)</code></p></li><li><code>npm.config.set(key, val)</code></li><li><p><code>npm.config.del(key)</code></p></li></ul></li><li><p><code>npm.dir</code> or <code>npm.root</code></p><p>The <code>node_modules</code> directory where npm will operate.</p></li><li><p><code>npm.prefix</code></p><p>The prefix where npm is operating. (Most often the current working
|
||||
directory.)</p></li><li><p><code>npm.cache</code></p><p>The place where npm keeps JSON and tarballs it fetches from the
|
||||
registry (or uploads to the registry).</p></li><li><p><code>npm.tmp</code></p><p>npm's temporary working directory.</p></li><li><p><code>npm.deref</code></p><p>Get the "real" name for a command that has either an alias or
|
||||
registry (or uploads to the registry).</p></li><li><p><code>npm.tmp</code></p><p>npm's temporary working directory.</p></li><li><p><code>npm.deref</code></p><p>Get the "real" name for a command that has either an alias or
|
||||
abbreviation.</p></li></ul>
|
||||
|
||||
<h2 id="MAGIC">MAGIC</h2>
|
||||
@@ -75,11 +74,11 @@ the error or results.</p>
|
||||
|
||||
<p>For example, this would work in a node repl:</p>
|
||||
|
||||
<pre><code>> npm = require("npm")
|
||||
<pre><code>> npm = require("npm")
|
||||
> npm.load() // wait a sec...
|
||||
> npm.install("dnode", "express")</code></pre>
|
||||
> npm.install("dnode", "express")</code></pre>
|
||||
|
||||
<p>Note that that <em>won't</em> work in a node program, since the <code>install</code>
|
||||
<p>Note that that <em>won't</em> work in a node program, since the <code>install</code>
|
||||
method will get called before the configuration load is completed.</p>
|
||||
|
||||
<h2 id="ABBREVS">ABBREVS</h2>
|
||||
@@ -90,9 +89,9 @@ method names. Use the <code>npm.deref</code> method to find the real name.</p>
|
||||
|
||||
<p>For example:</p>
|
||||
|
||||
<pre><code>var cmd = npm.deref("unp") // cmd === "unpublish"</code></pre>
|
||||
<pre><code>var cmd = npm.deref("unp") // cmd === "unpublish"</code></pre>
|
||||
</div>
|
||||
<p id="footer">npm — npm@1.2.30</p>
|
||||
<p id="footer">npm — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/outdated.html
vendored
6
deps/npm/html/api/outdated.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>outdated</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -17,9 +17,9 @@
|
||||
<p>This command will check the registry to see if the specified packages are
|
||||
currently outdated.</p>
|
||||
|
||||
<p>If the 'packages' parameter is left out, npm will check all packages.</p>
|
||||
<p>If the 'packages' parameter is left out, npm will check all packages.</p>
|
||||
</div>
|
||||
<p id="footer">outdated — npm@1.2.30</p>
|
||||
<p id="footer">outdated — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/owner.html
vendored
8
deps/npm/html/api/owner.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>owner</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>The first element of the 'args' parameter defines what to do, and the subsequent
|
||||
<p>The first element of the 'args' parameter defines what to do, and the subsequent
|
||||
elements depend on the action. Possible values for the action are (order of
|
||||
parameters are given in parenthesis):</p>
|
||||
|
||||
@@ -27,14 +27,14 @@ Remove a user from the package owner list. This immediately revokes their
|
||||
privileges.</li></ul>
|
||||
|
||||
<p>Note that there is only one level of access. Either you can modify a package,
|
||||
or you can't. Future versions may contain more fine-grained access levels, but
|
||||
or you can't. Future versions may contain more fine-grained access levels, but
|
||||
that is not implemented at this time.</p>
|
||||
|
||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||
|
||||
<ul><li><a href="../api/publish.html">publish(3)</a></li><li><a href="../doc/registry.html">registry(1)</a></li></ul>
|
||||
</div>
|
||||
<p id="footer">owner — npm@1.2.30</p>
|
||||
<p id="footer">owner — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/pack.html
vendored
6
deps/npm/html/api/pack.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>pack</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>For anything that's installable (that is, a package folder, tarball,
|
||||
<p>For anything that's installable (that is, a package folder, tarball,
|
||||
tarball url, name@tag, name@version, or name), this command will fetch
|
||||
it to the cache, and then copy the tarball to the current working
|
||||
directory as <code><name>-<version>.tgz</code>, and then write the filenames out to
|
||||
@@ -25,7 +25,7 @@ overwritten the second time.</p>
|
||||
|
||||
<p>If no arguments are supplied, then npm packs the current package folder.</p>
|
||||
</div>
|
||||
<p id="footer">pack — npm@1.2.30</p>
|
||||
<p id="footer">pack — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/prefix.html
vendored
8
deps/npm/html/api/prefix.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>prefix</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -16,12 +16,12 @@
|
||||
|
||||
<p>Print the prefix to standard out.</p>
|
||||
|
||||
<p>'args' is never used and callback is never called with data.
|
||||
'args' must be present or things will break.</p>
|
||||
<p>'args' is never used and callback is never called with data.
|
||||
'args' must be present or things will break.</p>
|
||||
|
||||
<p>This function is not useful programmatically</p>
|
||||
</div>
|
||||
<p id="footer">prefix — npm@1.2.30</p>
|
||||
<p id="footer">prefix — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/prune.html
vendored
8
deps/npm/html/api/prune.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>prune</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,16 +14,16 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This command removes "extraneous" packages.</p>
|
||||
<p>This command removes "extraneous" packages.</p>
|
||||
|
||||
<p>The first parameter is optional, and it specifies packages to be removed.</p>
|
||||
|
||||
<p>No packages are specified, then all packages will be checked.</p>
|
||||
|
||||
<p>Extraneous packages are packages that are not listed on the parent
|
||||
package's dependencies list.</p>
|
||||
package's dependencies list.</p>
|
||||
</div>
|
||||
<p id="footer">prune — npm@1.2.30</p>
|
||||
<p id="footer">prune — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/publish.html
vendored
8
deps/npm/html/api/publish.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>publish</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -15,7 +15,7 @@
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>Publishes a package to the registry so that it can be installed by name.
|
||||
Possible values in the 'packages' array are:</p>
|
||||
Possible values in the 'packages' array are:</p>
|
||||
|
||||
<ul><li><p><code><folder></code>:
|
||||
A folder containing a package.json file</p></li><li><p><code><tarball></code>:
|
||||
@@ -26,13 +26,13 @@ with a package.json file inside.</p></li></ul>
|
||||
current working directory.</p>
|
||||
|
||||
<p>This command could fails if one of the packages specified already exists in
|
||||
the registry. Overwrites when the "force" environment variable is set.</p>
|
||||
the registry. Overwrites when the "force" environment variable is set.</p>
|
||||
|
||||
<h2 id="SEE-ALSO">SEE ALSO</h2>
|
||||
|
||||
<ul><li><a href="../doc/registry.html">registry(1)</a></li><li><a href="../doc/adduser.html">adduser(1)</a></li><li><a href="../api/owner.html">owner(3)</a></li></ul>
|
||||
</div>
|
||||
<p id="footer">publish — npm@1.2.30</p>
|
||||
<p id="footer">publish — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/rebuild.html
vendored
6
deps/npm/html/api/rebuild.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>rebuild</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
<p>This command runs the <code>npm build</code> command on each of the matched packages. This is useful
|
||||
when you install a new version of node, and must recompile all your C++ addons with
|
||||
the new binary. If no 'packages' parameter is specify, every package will be rebuilt.</p>
|
||||
the new binary. If no 'packages' parameter is specify, every package will be rebuilt.</p>
|
||||
|
||||
<h2 id="CONFIGURATION">CONFIGURATION</h2>
|
||||
|
||||
<p>See <code>npm help build</code></p>
|
||||
</div>
|
||||
<p id="footer">rebuild — npm@1.2.30</p>
|
||||
<p id="footer">rebuild — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
12
deps/npm/html/api/restart.html
vendored
12
deps/npm/html/api/restart.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>restart</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,11 +14,11 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This runs a package's "restart" script, if one was provided.
|
||||
Otherwise it runs package's "stop" script, if one was provided, and then
|
||||
the "start" script.</p>
|
||||
<p>This runs a package's "restart" script, if one was provided.
|
||||
Otherwise it runs package's "stop" script, if one was provided, and then
|
||||
the "start" script.</p>
|
||||
|
||||
<p>If no version is specified, then it restarts the "active" version.</p>
|
||||
<p>If no version is specified, then it restarts the "active" version.</p>
|
||||
|
||||
<p>npm can run tests on multiple packages. Just specify multiple packages
|
||||
in the <code>packages</code> parameter.</p>
|
||||
@@ -27,7 +27,7 @@ in the <code>packages</code> parameter.</p>
|
||||
|
||||
<ul><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
|
||||
</div>
|
||||
<p id="footer">restart — npm@1.2.30</p>
|
||||
<p id="footer">restart — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/root.html
vendored
8
deps/npm/html/api/root.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>root</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -16,12 +16,12 @@
|
||||
|
||||
<p>Print the effective <code>node_modules</code> folder to standard out.</p>
|
||||
|
||||
<p>'args' is never used and callback is never called with data.
|
||||
'args' must be present or things will break.</p>
|
||||
<p>'args' is never used and callback is never called with data.
|
||||
'args' must be present or things will break.</p>
|
||||
|
||||
<p>This function is not useful programmatically.</p>
|
||||
</div>
|
||||
<p id="footer">root — npm@1.2.30</p>
|
||||
<p id="footer">root — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/run-script.html
vendored
8
deps/npm/html/api/run-script.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>run-script</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,12 +14,12 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This runs an arbitrary command from a package's "scripts" object.</p>
|
||||
<p>This runs an arbitrary command from a package's "scripts" object.</p>
|
||||
|
||||
<p>It is used by the test, start, restart, and stop commands, but can be
|
||||
called directly, as well.</p>
|
||||
|
||||
<p>The 'args' parameter is an array of strings. Behavior depends on the number
|
||||
<p>The 'args' parameter is an array of strings. Behavior depends on the number
|
||||
of elements. If there is only one element, npm assumes that the element
|
||||
represents a command to be run on the local repository. If there is more than
|
||||
one element, then the first is assumed to be the package and the second is
|
||||
@@ -29,7 +29,7 @@ assumed to be the command to run. All other elements are ignored.</p>
|
||||
|
||||
<ul><li><a href="../doc/scripts.html">scripts(1)</a></li><li><a href="../api/test.html">test(3)</a></li><li><a href="../api/start.html">start(3)</a></li><li><a href="../api/restart.html">restart(3)</a></li><li><a href="../api/stop.html">stop(3)</a></li></ul>
|
||||
</div>
|
||||
<p id="footer">run-script — npm@1.2.30</p>
|
||||
<p id="footer">run-script — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
12
deps/npm/html/api/search.html
vendored
12
deps/npm/html/api/search.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>search</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -19,20 +19,20 @@
|
||||
<ul><li>searchTerms:
|
||||
Array of search terms. These terms are case-insensitive.</li><li>silent:
|
||||
If true, npm will not log anything to the console.</li><li>staleness:
|
||||
This is the threshold for stale packages. "Fresh" packages are not refreshed
|
||||
This is the threshold for stale packages. "Fresh" packages are not refreshed
|
||||
from the registry. This value is measured in seconds.</li><li><p>callback:
|
||||
Returns an object where each key is the name of a package, and the value
|
||||
is information about that package along with a 'words' property, which is
|
||||
is information about that package along with a 'words' property, which is
|
||||
a space-delimited string of all of the interesting words in that package.
|
||||
The only properties included are those that are searched, which generally include:</p><ul><li>name</li><li>description</li><li>maintainers</li><li>url</li><li>keywords</li></ul></li></ul>
|
||||
|
||||
<p>A search on the registry excludes any result that does not match all of the
|
||||
search terms. It also removes any items from the results that contain an
|
||||
excluded term (the "searchexclude" config). The search is case insensitive
|
||||
and doesn't try to read your mind (it doesn't do any verb tense matching or the
|
||||
excluded term (the "searchexclude" config). The search is case insensitive
|
||||
and doesn't try to read your mind (it doesn't do any verb tense matching or the
|
||||
like).</p>
|
||||
</div>
|
||||
<p id="footer">search — npm@1.2.30</p>
|
||||
<p id="footer">search — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
10
deps/npm/html/api/shrinkwrap.html
vendored
10
deps/npm/html/api/shrinkwrap.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>shrinkwrap</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -16,17 +16,17 @@
|
||||
|
||||
<p>This acts much the same ways as shrinkwrapping on the command-line.</p>
|
||||
|
||||
<p>This command does not take any arguments, but 'args' must be defined.
|
||||
<p>This command does not take any arguments, but 'args' must be defined.
|
||||
Beyond that, if any arguments are passed in, npm will politely warn that it
|
||||
does not take positional arguments.</p>
|
||||
|
||||
<p>If the 'silent' parameter is set to true, nothing will be output to the screen,
|
||||
<p>If the 'silent' parameter is set to true, nothing will be output to the screen,
|
||||
but the shrinkwrap file will still be written.</p>
|
||||
|
||||
<p>Finally, 'callback' is a function that will be called when the shrinkwrap has
|
||||
<p>Finally, 'callback' is a function that will be called when the shrinkwrap has
|
||||
been saved.</p>
|
||||
</div>
|
||||
<p id="footer">shrinkwrap — npm@1.2.30</p>
|
||||
<p id="footer">shrinkwrap — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/start.html
vendored
6
deps/npm/html/api/start.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>start</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,12 +14,12 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This runs a package's "start" script, if one was provided.</p>
|
||||
<p>This runs a package's "start" script, if one was provided.</p>
|
||||
|
||||
<p>npm can run tests on multiple packages. Just specify multiple packages
|
||||
in the <code>packages</code> parameter.</p>
|
||||
</div>
|
||||
<p id="footer">start — npm@1.2.30</p>
|
||||
<p id="footer">start — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/stop.html
vendored
6
deps/npm/html/api/stop.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>stop</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,12 +14,12 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This runs a package's "stop" script, if one was provided.</p>
|
||||
<p>This runs a package's "stop" script, if one was provided.</p>
|
||||
|
||||
<p>npm can run stop on multiple packages. Just specify multiple packages
|
||||
in the <code>packages</code> parameter.</p>
|
||||
</div>
|
||||
<p id="footer">stop — npm@1.2.30</p>
|
||||
<p id="footer">stop — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/submodule.html
vendored
6
deps/npm/html/api/submodule.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>submodule</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -18,7 +18,7 @@
|
||||
in its package.json description then add it as a git submodule at
|
||||
<code>node_modules/<pkg name></code>.</p>
|
||||
|
||||
<p>This is a convenience only. From then on, it's up to you to manage
|
||||
<p>This is a convenience only. From then on, it's up to you to manage
|
||||
updates by using the appropriate git commands. npm will stubbornly
|
||||
refuse to update, modify, or remove anything with a <code>.git</code> subfolder
|
||||
in it.</p>
|
||||
@@ -33,7 +33,7 @@ dependencies into the submodule folder.</p>
|
||||
|
||||
<ul><li>npm help json</li><li>git help submodule</li></ul>
|
||||
</div>
|
||||
<p id="footer">submodule — npm@1.2.30</p>
|
||||
<p id="footer">submodule — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/tag.html
vendored
6
deps/npm/html/api/tag.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>tag</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -17,7 +17,7 @@
|
||||
<p>Tags the specified version of the package with the specified tag, or the
|
||||
<code>--tag</code> config if not specified.</p>
|
||||
|
||||
<p>The 'package@version' is an array of strings, but only the first two elements are
|
||||
<p>The 'package@version' is an array of strings, but only the first two elements are
|
||||
currently used.</p>
|
||||
|
||||
<p>The first element must be in the form package@version, where package
|
||||
@@ -29,7 +29,7 @@ parameter is missing or falsey (empty), the default froom the config will be
|
||||
used. For more information about how to set this config, check
|
||||
<code>man 3 npm-config</code> for programmatic usage or <code>man npm-config</code> for cli usage.</p>
|
||||
</div>
|
||||
<p id="footer">tag — npm@1.2.30</p>
|
||||
<p id="footer">tag — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/test.html
vendored
6
deps/npm/html/api/test.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>test</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
<h2 id="DESCRIPTION">DESCRIPTION</h2>
|
||||
|
||||
<p>This runs a package's "test" script, if one was provided.</p>
|
||||
<p>This runs a package's "test" script, if one was provided.</p>
|
||||
|
||||
<p>To run tests as a condition of installation, set the <code>npat</code> config to
|
||||
true.</p>
|
||||
@@ -22,7 +22,7 @@ true.</p>
|
||||
<p>npm can run tests on multiple packages. Just specify multiple packages
|
||||
in the <code>packages</code> parameter.</p>
|
||||
</div>
|
||||
<p id="footer">test — npm@1.2.30</p>
|
||||
<p id="footer">test — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
8
deps/npm/html/api/uninstall.html
vendored
8
deps/npm/html/api/uninstall.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>uninstall</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
<p>This acts much the same ways as uninstalling on the command-line.</p>
|
||||
|
||||
<p>The 'packages' parameter is an array of strings. Each element in the array is
|
||||
<p>The 'packages' parameter is an array of strings. Each element in the array is
|
||||
the name of a package to be uninstalled.</p>
|
||||
|
||||
<p>Finally, 'callback' is a function that will be called when all packages have been
|
||||
<p>Finally, 'callback' is a function that will be called when all packages have been
|
||||
uninstalled or when an error has been encountered.</p>
|
||||
</div>
|
||||
<p id="footer">uninstall — npm@1.2.30</p>
|
||||
<p id="footer">uninstall — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
4
deps/npm/html/api/unpublish.html
vendored
4
deps/npm/html/api/unpublish.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>unpublish</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -26,7 +26,7 @@ is what is meant.</p>
|
||||
<p>If no version is specified, or if all versions are removed then
|
||||
the root package entry is removed from the registry entirely.</p>
|
||||
</div>
|
||||
<p id="footer">unpublish — npm@1.2.30</p>
|
||||
<p id="footer">unpublish — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
6
deps/npm/html/api/update.html
vendored
6
deps/npm/html/api/update.html
vendored
@@ -2,7 +2,7 @@
|
||||
<html>
|
||||
<title>update</title>
|
||||
<meta http-equiv="content-type" value="text/html;utf-8">
|
||||
<link rel="stylesheet" type="text/css" href="../static/style.css">
|
||||
<link rel="stylesheet" type="text/css" href="../style.css">
|
||||
|
||||
<body>
|
||||
<div id="wrapper">
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
<p>Updates a package, upgrading it to the latest version. It also installs any missing packages.</p>
|
||||
|
||||
<p>The 'packages' argument is an array of packages to update. The 'callback' parameter will be called when done or when an error occurs.</p>
|
||||
<p>The 'packages' argument is an array of packages to update. The 'callback' parameter will be called when done or when an error occurs.</p>
|
||||
</div>
|
||||
<p id="footer">update — npm@1.2.30</p>
|
||||
<p id="footer">update — npm@1.1.37</p>
|
||||
<script>
|
||||
;(function () {
|
||||
var wrapper = document.getElementById("wrapper")
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user