AvianFlu / ncp

Asynchronous recursive file copying with Node.js.
MIT License
680 stars 103 forks source link

ncp does not work on io.js due to version sniffing #79

Closed nicks closed 9 years ago

nicks commented 9 years ago

io.js (https://iojs.org/) has process.version 'v1.0.3'

When it tries to use ncp, ncp runs this check:

const modern = /^v0\.1\d\.\d+/.test(process.version);

https://github.com/AvianFlu/ncp/blob/master/lib/ncp.js#L4

sadly, this identifies io.js as a non-modern version. It picks the wrong 'defer' method, and goes into an infinite loop.

stefanpenner commented 9 years ago

I believe I also just ran into this, but just to be sure I'll mention my scenario. (if it ends up being issue, I can gladly open another issue)

given the following file structure

folder/app.js
dist/

input/folder -> ../folder
input/foo.js

running

var ncp = require('ncp');

ncp('input', 'dist', {
      dereference: true,
      clobber: true,
      stopOnErr: true,
      limit: 2
    }, function(err, result) {
      console.log(err, result);
    });

also results in 100% CPU.

± % npm version
{ foo: '0.0.0',
  npm: '2.3.0',
  ares: '1.10.0-DEV',
  http_parser: '2.4',
  modules: '42',
  node: '1.0.4',
  openssl: '1.0.1k',
  uv: '1.2.1',
  v8: '4.1.0.12',
  zlib: '1.2.8' }
shakiba commented 9 years ago

I have the same issue on io.js/ubuntu, it breaks phantomjs installation script which uses ncp.

gsklee commented 9 years ago

Related: giakki/uncss#142

bajtos commented 9 years ago

The discussion in #80 proposes to drop support for Node v0.8, remove the no longer needed version sniffer and release ncp@2.0.0.

domenic commented 9 years ago

OMG classic version-sniffing problems, it's like browsers or if (osVersion[0] === "9") { /* is Windows 95 or Windows 98 */ } all over again.

mmalecki commented 9 years ago

Fixed by removing the version check altogether in b920f5366b51ba766cc9c7e74a18704fd246b300. Sorry for the massive delay on this folks.

mmalecki commented 9 years ago

This was released as v2.0.0 BTW.