componentjs / component

frontend package manager and build tool for modular web applications
https://github.com/componentjs/guide
MIT License
4.55k stars 306 forks source link

Broken install ergonomics #564

Closed jasonkuhrt closed 9 years ago

jasonkuhrt commented 10 years ago

There's a boat load of issues surrounding module installation/updating.

  1. If:
    • a module is listed in component.json as e.g. "visionmedia/superagent": "~0.17.0" and
    • not installed in ./components and
    • user does > component install visionmedia/superagent
    • then visionmedia/superagent@0.18.0 is isntalled; wtf?
  2. If:
    • a module is listed in component.json as e.g. "visionmedia/superagent": "~0.18.0" and
    • is installed in ./components as visionmedia/superagent@0.17.0 and
    • user does > component install visionmedia/superagent
    • then nothing happens (I want the version specified in component.json to be installed); wtf?

This stuff has to Just Work(tm). I'm outlining the issues before diving deeper to make sure there's no gaps in the problem definition. Thoughts?

jasonkuhrt commented 10 years ago

Generally what I am getting at is there is a surprising and subtle (aka terrible) interplay between ./components and component.json that influences how component(1) behaves. I believe the current behaviour to be bad, but worse still is there are no warnings or explanations of what's going on even if current behaviour is exactly as desired implementation-wise.

Not ragging, lets just make it better.

dominicbarnes commented 10 years ago

Just to be clear, what version of component are you using? (component 0.19 and 1.0.0-rc5 are vastly different in how they handle versioning/installation)

jasonkuhrt commented 10 years ago

@dominicbarnes 1.0.0-rc5.

dominicbarnes commented 10 years ago

Odd, I haven't had versioning issues w/ 1.0.0-rc5 like you are describing. Have you tried adding DEBUG=* to your component install command to see if it reveals more information?

jasonkuhrt commented 10 years ago

@dominicbarnes Here is a debug flow. This is yet another issue not listed above.

~/projects/cloud-client-api-http
⧑ cat component.json                                                                                                                                                    
{
  "name": "littlebits-cloud-http",
  "version": "0.0.3",
  "description": "Lightweight wrapper for littleBits Cloud HTTP API",
  "main": "index.js",
  "scripts": [
    "index.js",
    "lib/customizations.js",
    "lib/make-method.js",
    "lib/method-process-signature.js",
    "lib/route-utils.js",
    "assets/routes.js"
  ],
  "license": "MIT",
  "dependencies": {
    "lodash/lodash": "^2.4.1",
    "visionmedia/superagent": "~0.18.0"
  }
}

I change my ./component.json via superagent ~0.18.0 to ~0.17.0

Fail:

~/projects/cloud-client-api-http
⧑ DEBUG=* c install                                                                                                                                                   
  remotes:local checking local components at /Users/jasonkuhrt/projects/cloud-client-api-http/components +0ms
  component-resolver remote not set - defaulting to remotes's defaults +0ms
  component-resolver:locals resolving local at "/Users/jasonkuhrt/projects/cloud-client-api-http" +0ms
  component-resolver resolving "littlebits-cloud-http" +6ms
  component-resolver remaining dependencies: 2 +4ms
  component-resolver remaining semver: 0 +0ms
  component-resolver finished resolving locals +0ms
  component-resolver finished resolving dependencies (1) +0ms
  component-resolver:semver resolving semver lodash/lodash@^2.4.1 +0ms
  remotes:local resolving local remote +14ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +1ms
  remotes:local got folders: 2.4.1 +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +0ms
  remotes:local got folders: 2.4.1 +1ms
  component-resolver:dependencies resolving dependency lodash/lodash@2.4.1 +0ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for lodash/lodash@2.4.1 +1ms
  remotes:local resolving local remote +2ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +0ms
  remotes:local got folders: 2.4.1 +0ms
  component-resolver:dependencies found lodash/lodash@2.4.1 from remote "local" +2ms
  component-resolver resolving "lodash/lodash" +7ms
  component-resolver remaining dependencies: 0 +0ms
  component-resolver remaining semver: 2 +0ms
  component-resolver:semver resolved semver lodash/lodash@^2.4.1 -> lodash/lodash@2.4.1 +7ms
  component-resolver:semver resolving semver visionmedia/superagent@~0.17.0 +0ms
  remotes:local resolving local remote +3ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  component-downloader "/Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash/2.4.1" exists, skipping downloading. +0ms
  remotes:local got folders: 0.18.0 +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  remotes:local got folders: 0.18.0 +0ms
  component-consoler Error: invalid semver range "~0.17.0" for "visionmedia/superagent"
    at Resolver.<anonymous> (/usr/local/share/npm/lib/node_modules/component/node_modules/component-resolver/build/semver.js:624:13)
    at Generator.invoke (/usr/local/share/npm/lib/node_modules/component/node_modules/component-resolver/build/index.js:141:31)
    at Generator.invoke (/usr/local/share/npm/lib/node_modules/component/node_modules/component-resolver/build/index.js:79:50)
    at next (/usr/local/share/npm/lib/node_modules/component/node_modules/co/index.js:77:21)
    at /usr/local/share/npm/lib/node_modules/component/node_modules/co/index.js:96:18
    at ReaddirReq.Req.done (/usr/local/share/npm/lib/node_modules/component/node_modules/component-resolver/node_modules/graceful-fs/graceful-fs.js:143:5)
    at ReaddirReq.done (/usr/local/share/npm/lib/node_modules/component/node_modules/component-resolver/node_modules/graceful-fs/graceful-fs.js:90:22)
    at ReaddirReq.Req.done (/usr/local/share/npm/lib/node_modules/component/node_modules/remotes/node_modules/graceful-fs/graceful-fs.js:143:5)
    at ReaddirReq.done (/usr/local/share/npm/lib/node_modules/component/node_modules/remotes/node_modules/graceful-fs/graceful-fs.js:90:22)
    at Object.oncomplete (fs.js:107:15) +0ms

       error : invalid semver range "~0.17.0" for "visionmedia/superagent"

What?

Oh:

~/projects/cloud-client-api-http
⧑ rm -rf components/visionmedia/superagent                                                                                                                            

Ok lets try again...

~/projects/cloud-client-api-http
⧑ DEBUG=* c install                                                                                                                                                   
  remotes:local checking local components at /Users/jasonkuhrt/projects/cloud-client-api-http/components +0ms
  component-resolver remote not set - defaulting to remotes's defaults +0ms
  component-resolver:locals resolving local at "/Users/jasonkuhrt/projects/cloud-client-api-http" +0ms
  component-resolver resolving "littlebits-cloud-http" +6ms
  component-resolver remaining dependencies: 2 +4ms
  component-resolver remaining semver: 0 +0ms
  component-resolver finished resolving locals +0ms
  component-resolver finished resolving dependencies (1) +1ms
  component-resolver:semver resolving semver lodash/lodash@^2.4.1 +0ms
  remotes:local resolving local remote +16ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +0ms
  remotes:local got folders: 2.4.1 +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +1ms
  remotes:local got folders: 2.4.1 +0ms
  component-resolver:dependencies resolving dependency lodash/lodash@2.4.1 +0ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for lodash/lodash@2.4.1 +0ms
  remotes:local resolving local remote +1ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +0ms
  remotes:local got folders: 2.4.1 +1ms
  component-resolver:dependencies found lodash/lodash@2.4.1 from remote "local" +2ms
  component-resolver resolving "lodash/lodash" +5ms
  component-resolver remaining dependencies: 0 +0ms
  component-resolver remaining semver: 2 +0ms
  component-resolver:semver resolved semver lodash/lodash@^2.4.1 -> lodash/lodash@2.4.1 +6ms
  component-resolver:semver resolving semver visionmedia/superagent@~0.17.0 +0ms
  remotes:local resolving local remote +2ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  component-downloader "/Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash/2.4.1" exists, skipping downloading. +0ms
  remotes:github GET "https://raw.githubusercontent.com/visionmedia/superagent/master/component.json" +0ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'raw.githubusercontent.com',
  port: null,
  hostname: 'raw.githubusercontent.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/visionmedia/superagent/master/component.json',
  path: '/visionmedia/superagent/master/component.json',
  href: 'https://raw.githubusercontent.com/visionmedia/superagent/master/component.json',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent',
     accept: 'application/json' },
  method: 'GET' } +0ms
  remotes:github GET "https://api.github.com/repos/visionmedia/superagent/tags" +366ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'api.github.com',
  port: null,
  hostname: 'api.github.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/repos/visionmedia/superagent/tags',
  path: '/repos/visionmedia/superagent/tags',
  href: 'https://api.github.com/repos/visionmedia/superagent/tags',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent',
     accept: 'application/json' },
  method: 'GET' } +363ms
  component-resolver:dependencies resolving dependency visionmedia/superagent@0.17.0 +1s
  component-resolver:dependencies searching ["local","github","bitbucket"] for visionmedia/superagent@0.17.0 +0ms
  remotes:local resolving local remote +1s
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  remotes:github GET "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/component.json" +714ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'raw.githubusercontent.com',
  port: null,
  hostname: 'raw.githubusercontent.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/visionmedia/superagent/0.17.0/component.json',
  path: '/visionmedia/superagent/0.17.0/component.json',
  href: 'https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/component.json',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent',
     accept: 'application/json' },
  method: 'GET' } +715ms
  component-resolver:dependencies found visionmedia/superagent@0.17.0 from remote "github" +1s
  component-resolver resolving "visionmedia/superagent" +2s
  component-resolver:semver resolving semver component/emitter@* +2s
  remotes:local resolving local remote +1s
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter +0ms
  component-resolver:semver resolving semver component/reduce@* +0ms
  remotes:local resolving local remote +1ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce +0ms
  component-resolver remaining dependencies: 2 +1ms
  component-resolver remaining semver: 1 +0ms
  component-resolver:semver resolved semver visionmedia/superagent@~0.17.0 -> visionmedia/superagent@0.17.0 +1ms
  component-resolver finished resolving semver +0ms
  remotes:local got folders: 1.1.2 +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter +0ms
  remotes:local got folders: 1.0.1 +1ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce +0ms
  remotes:local resolving local remote +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  remotes:local got folders: 1.1.2 +0ms
  component-resolver:dependencies resolving dependency component/emitter@1.1.2 +2ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for component/emitter@1.1.2 +1ms
  remotes:local resolving local remote +1ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter +0ms
  remotes:local got folders: 1.0.1 +0ms
  component-resolver:dependencies resolving dependency component/reduce@1.0.1 +0ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for component/reduce@1.0.1 +0ms
  remotes:local resolving local remote +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce +0ms
  component-downloader resolved visionmedia/superagent@0.17.0 to github +2s
  remotes:local got folders: 1.1.2 +2ms
  remotes:local got folders: 1.0.1 +0ms
  component-downloader downloading "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js" to "/Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent/0.17.0/lib/client.js" +2ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'raw.githubusercontent.com',
  port: null,
  hostname: 'raw.githubusercontent.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/visionmedia/superagent/0.17.0/lib/client.js',
  path: '/visionmedia/superagent/0.17.0/lib/client.js',
  href: 'https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent' },
  method: 'GET' } +1s
  component-resolver:dependencies found component/reduce@1.0.1 from remote "local" +5ms
  component-resolver resolving "component/reduce" +7ms
  component-resolver remaining dependencies: 2 +0ms
  component-resolver remaining semver: 0 +0ms
  component-resolver:semver resolved semver component/reduce@* -> component/reduce@1.0.1 +7ms
  component-resolver:dependencies found component/emitter@1.1.2 from remote "local" +0ms
  component-resolver resolving "component/emitter" +0ms
  component-resolver remaining dependencies: 2 +0ms
  component-resolver remaining semver: 0 +0ms
  component-resolver:semver resolved semver component/emitter@* -> component/emitter@1.1.2 +1ms
  component-downloader "/Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce/1.0.1" exists, skipping downloading. +3ms
  component-downloader "/Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter/1.1.2" exists, skipping downloading. +0ms
  component-resolver finished resolving dependencies(2) +1ms
  cogent timeout exceeded for GET https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js +5s
  cogent received error "timeout of 5000ms exceeded for "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js"" with "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js" +1ms
  component-consoler Error: timeout of 5000ms exceeded for "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js"
    at null.<anonymous> (/usr/local/share/npm/lib/node_modules/component/node_modules/cogent/build/index.js:435:23)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15) +0ms

       error : timeout of 5000ms exceeded for "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js"

Huh?

Try again?

~/projects/cloud-client-api-http
⧑ DEBUG=* c install                                                                                                                                                   
  remotes:local checking local components at /Users/jasonkuhrt/projects/cloud-client-api-http/components +0ms
  component-resolver remote not set - defaulting to remotes's defaults +0ms
  component-resolver:locals resolving local at "/Users/jasonkuhrt/projects/cloud-client-api-http" +0ms
  component-resolver resolving "littlebits-cloud-http" +5ms
  component-resolver remaining dependencies: 2 +5ms
  component-resolver remaining semver: 0 +0ms
  component-resolver finished resolving locals +0ms
  component-resolver finished resolving dependencies (1) +0ms
  component-resolver:semver resolving semver lodash/lodash@^2.4.1 +0ms
  remotes:local resolving local remote +14ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +1ms
  remotes:local got folders: 2.4.1 +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +0ms
  remotes:local got folders: 2.4.1 +1ms
  component-resolver:dependencies resolving dependency lodash/lodash@2.4.1 +0ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for lodash/lodash@2.4.1 +0ms
  remotes:local resolving local remote +2ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash +0ms
  remotes:local got folders: 2.4.1 +0ms
  component-resolver:dependencies found lodash/lodash@2.4.1 from remote "local" +2ms
  component-resolver resolving "lodash/lodash" +6ms
  component-resolver remaining dependencies: 0 +0ms
  component-resolver remaining semver: 2 +0ms
  component-resolver:semver resolved semver lodash/lodash@^2.4.1 -> lodash/lodash@2.4.1 +6ms
  component-resolver:semver resolving semver visionmedia/superagent@~0.17.0 +0ms
  remotes:local resolving local remote +2ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  component-downloader "/Users/jasonkuhrt/projects/cloud-client-api-http/components/lodash/lodash/2.4.1" exists, skipping downloading. +0ms
  remotes:local got folders:  +0ms
  remotes:github GET "https://raw.githubusercontent.com/visionmedia/superagent/master/component.json" +0ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'raw.githubusercontent.com',
  port: null,
  hostname: 'raw.githubusercontent.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/visionmedia/superagent/master/component.json',
  path: '/visionmedia/superagent/master/component.json',
  href: 'https://raw.githubusercontent.com/visionmedia/superagent/master/component.json',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent',
     accept: 'application/json' },
  method: 'GET' } +0ms
  remotes:github GET "https://api.github.com/repos/visionmedia/superagent/tags" +605ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'api.github.com',
  port: null,
  hostname: 'api.github.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/repos/visionmedia/superagent/tags',
  path: '/repos/visionmedia/superagent/tags',
  href: 'https://api.github.com/repos/visionmedia/superagent/tags',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent',
     accept: 'application/json' },
  method: 'GET' } +603ms
  component-resolver:dependencies resolving dependency visionmedia/superagent@0.17.0 +721ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for visionmedia/superagent@0.17.0 +1ms
  remotes:local resolving local remote +721ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  remotes:local got folders:  +0ms
  remotes:github GET "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/component.json" +115ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'raw.githubusercontent.com',
  port: null,
  hostname: 'raw.githubusercontent.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/visionmedia/superagent/0.17.0/component.json',
  path: '/visionmedia/superagent/0.17.0/component.json',
  href: 'https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/component.json',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent',
     accept: 'application/json' },
  method: 'GET' } +114ms
  component-resolver:dependencies found visionmedia/superagent@0.17.0 from remote "github" +58ms
  component-resolver resolving "visionmedia/superagent" +780ms
  component-resolver:semver resolving semver component/emitter@* +779ms
  remotes:local resolving local remote +59ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter +0ms
  component-resolver:semver resolving semver component/reduce@* +1ms
  remotes:local resolving local remote +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce +0ms
  component-resolver remaining dependencies: 2 +1ms
  component-resolver remaining semver: 1 +0ms
  component-resolver:semver resolved semver visionmedia/superagent@~0.17.0 -> visionmedia/superagent@0.17.0 +1ms
  component-resolver finished resolving semver +1ms
  remotes:local got folders: 1.1.2 +1ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter +1ms
  remotes:local got folders: 1.0.1 +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce +0ms
  remotes:local resolving local remote +1ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent +0ms
  remotes:local got folders: 1.1.2 +0ms
  component-resolver:dependencies resolving dependency component/emitter@1.1.2 +4ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for component/emitter@1.1.2 +0ms
  remotes:local resolving local remote +0ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter +0ms
  remotes:local got folders: 1.0.1 +0ms
  component-resolver:dependencies resolving dependency component/reduce@1.0.1 +1ms
  component-resolver:dependencies searching ["local","github","bitbucket"] for component/reduce@1.0.1 +0ms
  remotes:local resolving local remote +1ms
  remotes:local checking folder: /Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce +0ms
  remotes:local got folders:  +0ms
  component-downloader resolved visionmedia/superagent@0.17.0 to github +784ms
  remotes:local got folders: 1.1.2 +2ms
  remotes:local got folders: 1.0.1 +0ms
  component-downloader downloading "https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js" to "/Users/jasonkuhrt/projects/cloud-client-api-http/components/visionmedia/superagent/0.17.0/lib/client.js" +3ms
  cogent options: { protocol: 'https:',
  slashes: true,
  auth: 'jasonkuhrt:314314Dd',
  host: 'raw.githubusercontent.com',
  port: null,
  hostname: 'raw.githubusercontent.com',
  hash: null,
  search: null,
  query: null,
  pathname: '/visionmedia/superagent/0.17.0/lib/client.js',
  path: '/visionmedia/superagent/0.17.0/lib/client.js',
  href: 'https://raw.githubusercontent.com/visionmedia/superagent/0.17.0/lib/client.js',
  headers:
   { 'accept-encoding': 'gzip',
     'user-agent': 'https://github.com/cojs/cogent' },
  method: 'GET' } +66ms
  component-resolver:dependencies found component/emitter@1.1.2 from remote "local" +5ms
  component-resolver resolving "component/emitter" +8ms
  component-resolver remaining dependencies: 2 +0ms
  component-resolver remaining semver: 0 +0ms
  component-resolver:semver resolved semver component/emitter@* -> component/emitter@1.1.2 +9ms
  component-resolver:dependencies found component/reduce@1.0.1 from remote "local" +1ms
  component-resolver resolving "component/reduce" +1ms
  component-resolver remaining dependencies: 1 +0ms
  component-resolver remaining semver: 0 +0ms
  component-resolver:semver resolved semver component/reduce@* -> component/reduce@1.0.1 +0ms
  component-downloader "/Users/jasonkuhrt/projects/cloud-client-api-http/components/component/emitter/1.1.2" exists, skipping downloading. +3ms
  component-resolver finished resolving dependencies(2) +0ms
  component-downloader "/Users/jasonkuhrt/projects/cloud-client-api-http/components/component/reduce/1.0.1" exists, skipping downloading. +0ms
  component-downloader installed visionmedia/superagent@0.17.0 in 76ms +68ms
   installed : visionmedia/superagent@0.17.0 in 76ms
  component-resolver finished installing dependencies +70ms
     install : complete

It worked? Oh.

So two other issues above there:

  1. A timeout
  2. Having another version of superagent in ./components breaks component install
jasonkuhrt commented 10 years ago

And:

~/projects/cloud-client-api-http
⧑ c --version                                                                                                                                                         
1.0.0-rc5
jonathanong commented 10 years ago

the first one is a bug @dominicbarnes pointed out before. i don't have the link to the issue, but the only way i know how to fix that is with more API requests.

the second one is just github being silly.

not too sure what's going with the failed semver resolution. if you can make a tiny repo that demonstrates this case that owuld be helpful.

DrDub commented 10 years ago

Hi, I'm experiencing this timeout issue with 1.0.0-rc5. Any way to increase that 5000ms timeout?

TIA.

dominicbarnes commented 10 years ago

If you create a custom builder instance, you can pass timeout as one of the options. (I'm working on a PR for component itself that will allow this override via the CLI)

There's also a retries option you can pass to help mitigate the effect those timeouts can have. (I've bumped retries up to 5 and have not even had to mess w/ timeout)

jonathanong commented 10 years ago

imo it should be a .componentrc file or something, not options. there are already too many options everywhere, and something like increased timeout is something you want with all the commands.

DrDub commented 10 years ago

Thanks! Just modifying the default under $HOME/.nvm/v0.11.12/lib/node_modules/component/node_modules/cogent/lib/index.js did the trick for the time being. Look forward for any PR that improves the situation.

jasonkuhrt commented 10 years ago

I hit this timeout routinely, why was 5000 deemed sufficient?

Sent from my iPhone

On May 15, 2014, at 17:03, Jonathan Ong notifications@github.com wrote:

imo it should be a .componentrc file or something, not options. there are already too many options everywhere

— Reply to this email directly or view it on GitHub.

jonathanong commented 10 years ago

better to fail fast vs. wait 30 seconds. if you're hitting the timeout, something is wrong, and unfortunately it's probably github and we can't do much about it. increasing the timeout is more of a "i know something is wrong and i'll tolerate it"

DrDub commented 10 years ago

Or that you're far from github. Not everybody lives in CA ;-)

dominicbarnes commented 10 years ago

To be clear, the timeout is for how long it takes to get a response, not how long the entire request-response cycle takes. Taking 5+ seconds to get a response from the server is a sign you should probably bail and try again in the interest of time. That being said, I think the default retries should be boosted from just 1 to something a little more resilient (like 3 or even 5)

termhare commented 10 years ago

Have any tests been being written lately? It seems that the large number of problems with component lately is because there are basically no tests being written. We should be definitely write tests for each of the cases that breaks, so it stops happening over and over again.

From what it looks like, all of the code for builder.js/component/installer.js hasn't had any tests written for months, and there's only a handful anyways.

jasonkuhrt commented 10 years ago

@lancejpollard not sure but I would be more than happy to contribute tests for the numerous broken flows I've found. Time is always an issue though so if the maintainers @jonathanong et al can whip up a point-form contributing.md template that outlines how to get tests added quickly that would be awesome.

jonathanong commented 10 years ago

sure! make some PRs and ill add you guys as collabs

rarkins commented 10 years ago

Repeated 5000ms timeouts from githubusercontent.com when using codeship.io have brought our workflow to an almost halt. Does GitHub "punish" hosts with rate limiting for making too many requests?

timaschew commented 9 years ago

To get back to the original issue:

The behaviour of component-install seems to be interpreted differently. But the help output and the implementation is clear for me and just doesn't fit with your expected behaviour: https://github.com/componentjs/component/blob/master/bin/component-install#L21-L37

So if you provide a name (as an extra CLI argument), the component.json is not used to install the dependency. You just need to call component-install if you want to install dependencies from your component.json.