-
Notifications
You must be signed in to change notification settings - Fork 29.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Native module compilation with io.js 2.x.x #1620
Comments
This will be a lot of work... there are a lot of libraries with old nan versions. Just search for a couple of entries. |
See also / previously: #456 Don't comment here with packages please. Just link to |
@Fishrock123 good idea. Just removed original comment and added reference from appropriate pull requests/issues I have openened for this. |
Here's a somewhat improved search query. |
I am not very used to querying CouchDB but this request seems to give all npm modules that have |
This is going to hurt. |
We need to find a better way to handle this. As I see it we have two routes:
|
Cool, that seems right. It would be awesome if someone were to put together a version-bump bot for minor versions of NAN (unless the package depends on ^1.0, 1.x or *, as those already resolve to latest version in the major). Unfortunately io.js 3.0 will require NAN 2.0, which is going to require rather substantial rewriting. The conversion could still be automated or semi-automated. |
👍 This would be awesome and bring lot of stability to native bindings. |
$ wget -qO- 'https://skimdb.npmjs.com/registry/_design/app/_view/dependentVersions?startkey=%5B"nan"%5D&endkey=%5B"nan!"%5D&reduce=false' | tail -n +2 | head -n -1 | egrep -v '1\.8|\^1|1\.x|\*' {"id":"libetpan","key":["nan","^0.8.0","libetpan"],"value":1},
{"id":"node-glfw","key":["nan","^0.8.0","node-glfw"],"value":1},
{"id":"node-image","key":["nan","^0.8.0","node-image"],"value":1},
{"id":"node-webgl","key":["nan","^0.8.0","node-webgl"],"value":1},
{"id":"polarssl","key":["nan","^0.8.0","polarssl"],"value":1},
{"id":"rdiff","key":["nan","^0.8.0","rdiff"],"value":1},
{"id":"thread-sleep","key":["nan","<2.0.0 >1.6.2 || 1.5.0","thread-sleep"],"value":1},
{"id":"syslogh","key":["nan",">= 1.3.0 < 1.4.0","syslogh"],"value":1},
{"id":"mhash","key":["nan",">= 1.6.2","mhash"],"value":1},
{"id":"number-smusher","key":["nan",">= 1.6.2","number-smusher"],"value":1},
{"id":"rand48","key":["nan",">= 1.6.2","rand48"],"value":1},
{"id":"exiv2","key":["nan",">= 1.7.0","exiv2"],"value":1},
{"id":"neventemitter","key":["nan",">=1.3.0","neventemitter"],"value":1},
{"id":"node-protobuf","key":["nan",">=1.3.0","node-protobuf"],"value":1},
{"id":"navelgazer","key":["nan",">=1.5.0 <1.6.0-0","navelgazer"],"value":1},
{"id":"fidonet-mailer-binkp-crypt","key":["nan",">0.0.0","fidonet-mailer-binkp-crypt"],"value":1},
{"id":"canvas-gurtnec","key":["nan","~0.3.0","canvas-gurtnec"],"value":1},
{"id":"lmdb","key":["nan","~0.3.1","lmdb"],"value":1},
{"id":"max31855pi","key":["nan","~0.3.1","max31855pi"],"value":1},
{"id":"zetta-lmdb","key":["nan","~0.3.1","zetta-lmdb"],"value":1},
{"id":"microtime2","key":["nan","~0.5.1","microtime2"],"value":1},
{"id":"rocksdb","key":["nan","~0.5.2","rocksdb"],"value":1},
{"id":"leveldown-basho","key":["nan","~0.6.0","leveldown-basho"],"value":1},
{"id":"leveldown-hyper","key":["nan","~0.6.0","leveldown-hyper"],"value":1},
{"id":"leveldown-hyper-prebuilt","key":["nan","~0.6.0","leveldown-hyper-prebuilt"],"value":1},
{"id":"lp_solve","key":["nan","~0.6.0","lp_solve"],"value":1},
{"id":"ssh","key":["nan","~0.6.0","ssh"],"value":1},
{"id":"node-stringprep-icu","key":["nan","~0.7.0","node-stringprep-icu"],"value":1},
{"id":"freetype2","key":["nan","~0.8","freetype2"],"value":1},
{"id":"ali.iconv","key":["nan","~0.8.0","ali.iconv"],"value":1},
{"id":"htsengine","key":["nan","~0.8.0","htsengine"],"value":1},
{"id":"inchi","key":["nan","~0.8.0","inchi"],"value":1},
{"id":"mysql-libmysqlclient","key":["nan","~0.8.0","mysql-libmysqlclient"],"value":1},
{"id":"ribs","key":["nan","~0.8.0","ribs"],"value":1},
{"id":"sparkey","key":["nan","~0.8.0","sparkey"],"value":1},
{"id":"sqlite3-trunk","key":["nan","~0.8.0","sqlite3-trunk"],"value":1},
{"id":"ws-non-native","key":["nan","~0.8.0","ws-non-native"],"value":1},
{"id":"canvas-trunk","key":["nan","~1.0.0","canvas-trunk"],"value":1},
{"id":"function-name","key":["nan","~1.0.0","function-name"],"value":1},
{"id":"gitteh","key":["nan","~1.0.0","gitteh"],"value":1},
{"id":"msgpack-bin","key":["nan","~1.0.0","msgpack-bin"],"value":1},
{"id":"nis","key":["nan","~1.0.0","nis"],"value":1},
{"id":"protobuf","key":["nan","~1.0.0","protobuf"],"value":1},
{"id":"pty.js-patch","key":["nan","~1.0.0","pty.js-patch"],"value":1},
{"id":"websocket","key":["nan","~1.0.0","websocket"],"value":1},
{"id":"node-v8-clone","key":["nan","~1.1","node-v8-clone"],"value":1},
{"id":"cjh-hiredis","key":["nan","~1.1.0","cjh-hiredis"],"value":1},
{"id":"durable","key":["nan","~1.1.0","durable"],"value":1},
{"id":"imagemagick-native","key":["nan","~1.1.0","imagemagick-native"],"value":1},
{"id":"procps","key":["nan","~1.1.0","procps"],"value":1},
{"id":"avon","key":["nan","~1.2.0","avon"],"value":1},
{"id":"bbc-xslt","key":["nan","~1.2.0","bbc-xslt"],"value":1},
{"id":"fis-sass-all","key":["nan","~1.2.0","fis-sass-all"],"value":1},
{"id":"goingnative","key":["nan","~1.2.0","goingnative"],"value":1},
{"id":"libxslt","key":["nan","~1.2.0","libxslt"],"value":1},
{"id":"mapbox-glsl-optimizer","key":["nan","~1.2.0","mapbox-glsl-optimizer"],"value":1},
{"id":"memcpy","key":["nan","~1.2.0","memcpy"],"value":1},
{"id":"node-snap7","key":["nan","~1.2.0","node-snap7"],"value":1},
{"id":"node-snappy-linux","key":["nan","~1.2.0","node-snappy-linux"],"value":1},
{"id":"node-snappy-mac","key":["nan","~1.2.0","node-snappy-mac"],"value":1},
{"id":"node-snappy-src","key":["nan","~1.2.0","node-snappy-src"],"value":1},
{"id":"node-snappy-window","key":["nan","~1.2.0","node-snappy-window"],"value":1},
{"id":"node-webcl","key":["nan","~1.2.0","node-webcl"],"value":1},
{"id":"norby","key":["nan","~1.2.0","norby"],"value":1},
{"id":"speaker-prebuild","key":["nan","~1.2.0","speaker-prebuild"],"value":1},
{"id":"v8-flags","key":["nan","~1.2.0","v8-flags"],"value":1},
{"id":"crypt3-prebuilt","key":["nan","~1.3.0","crypt3-prebuilt"],"value":1},
{"id":"font-manager","key":["nan","~1.3.0","font-manager"],"value":1},
{"id":"hmsearch","key":["nan","~1.3.0","hmsearch"],"value":1},
{"id":"lbm","key":["nan","~1.3.0","lbm"],"value":1},
{"id":"lzh","key":["nan","~1.3.0","lzh"],"value":1},
{"id":"magick-compare","key":["nan","~1.3.0","magick-compare"],"value":1},
{"id":"magicklib-native","key":["nan","~1.3.0","magicklib-native"],"value":1},
{"id":"node-ios-device","key":["nan","~1.3.0","node-ios-device"],"value":1},
{"id":"nodegit-probablycorey","key":["nan","~1.3.0","nodegit-probablycorey"],"value":1},
{"id":"osx-tag","key":["nan","~1.3.0","osx-tag"],"value":1},
{"id":"registwin","key":["nan","~1.3.0","registwin"],"value":1},
{"id":"runsync","key":["nan","~1.3.0","runsync"],"value":1},
{"id":"xxhash-nan","key":["nan","~1.3.0","xxhash-nan"],"value":1},
{"id":"boss-mdns","key":["nan","~1.4.0","boss-mdns"],"value":1},
{"id":"reset-usb","key":["nan","~1.4.0","reset-usb"],"value":1},
{"id":"base-convert","key":["nan","~1.4.1","base-convert"],"value":1},
{"id":"bignum-v1113","key":["nan","~1.4.1","bignum-v1113"],"value":1},
{"id":"bot-io","key":["nan","~1.4.1","bot-io"],"value":1},
{"id":"brkontru","key":["nan","~1.4.1","brkontru"],"value":1},
{"id":"flush-all","key":["nan","~1.4.1","flush-all"],"value":1},
{"id":"keepass.io","key":["nan","~1.4.1","keepass.io"],"value":1},
{"id":"lwip","key":["nan","~1.4.1","lwip"],"value":1},
{"id":"xpc-connection-nan","key":["nan","~1.4.1","xpc-connection-nan"],"value":1},
{"id":"fs-ext-prebuilt","key":["nan","~1.4.3","fs-ext-prebuilt"],"value":1},
{"id":"aerospike","key":["nan","~1.5.0","aerospike"],"value":1},
{"id":"contextify","key":["nan","~1.5.0","contextify"],"value":1},
{"id":"hiredis","key":["nan","~1.5.0","hiredis"],"value":1},
{"id":"leveldown-prebuilt","key":["nan","~1.5.0","leveldown-prebuilt"],"value":1},
{"id":"mdns","key":["nan","~1.5.0","mdns"],"value":1},
{"id":"node-kv","key":["nan","~1.5.0","node-kv"],"value":1},
{"id":"node-rijndael","key":["nan","~1.5.0","node-rijndael"],"value":1},
{"id":"zmq","key":["nan","~1.5.0","zmq"],"value":1},
{"id":"canvas","key":["nan","~1.5.1","canvas"],"value":1},
{"id":"dtrace-provider","key":["nan","~1.5.1","dtrace-provider"],"value":1},
{"id":"stall","key":["nan","~1.5.1","stall"],"value":1},
{"id":"zipfile","key":["nan","~1.5.1","zipfile"],"value":1},
{"id":"inotify2","key":["nan","~1.5.3","inotify2"],"value":1},
{"id":"binny","key":["nan","~1.6","binny"],"value":1},
{"id":"fs-ext","key":["nan","~1.6","fs-ext"],"value":1},
{"id":"ip2location-native","key":["nan","~1.6","ip2location-native"],"value":1},
{"id":"murmurhash-native","key":["nan","~1.6","murmurhash-native"],"value":1},
{"id":"zstd","key":["nan","~1.6","zstd"],"value":1},
{"id":"hiredis-simple","key":["nan","~1.6.0","hiredis-simple"],"value":1},
{"id":"midi","key":["nan","~1.6.0","midi"],"value":1},
{"id":"pg-sync","key":["nan","~1.6.0","pg-sync"],"value":1},
{"id":"nodejieba","key":["nan","~1.6.1","nodejieba"],"value":1},
{"id":"pcap","key":["nan","~1.6.1","pcap"],"value":1},
{"id":"r-pi-gpio","key":["nan","~1.6.1","r-pi-gpio"],"value":1},
{"id":"sypexgeo-vyvid","key":["nan","~1.6.1","sypexgeo-vyvid"],"value":1},
{"id":"bignum","key":["nan","~1.6.2","bignum"],"value":1},
{"id":"celt","key":["nan","~1.6.2","celt"],"value":1},
{"id":"epoll","key":["nan","~1.6.2","epoll"],"value":1},
{"id":"geoip","key":["nan","~1.6.2","geoip"],"value":1},
{"id":"groove","key":["nan","~1.6.2","groove"],"value":1},
{"id":"http-sync","key":["nan","~1.6.2","http-sync"],"value":1},
{"id":"iojs-nanomsg","key":["nan","~1.6.2","iojs-nanomsg"],"value":1},
{"id":"jitterbuffer","key":["nan","~1.6.2","jitterbuffer"],"value":1},
{"id":"murmurhash3","key":["nan","~1.6.2","murmurhash3"],"value":1},
{"id":"node-espeak","key":["nan","~1.6.2","node-espeak"],"value":1},
{"id":"node-opus","key":["nan","~1.6.2","node-opus"],"value":1},
{"id":"node-samplerate","key":["nan","~1.6.2","node-samplerate"],"value":1},
{"id":"node-svm","key":["nan","~1.6.2","node-svm"],"value":1},
{"id":"nosql-leveldb","key":["nan","~1.6.2","nosql-leveldb"],"value":1},
{"id":"osrm","key":["nan","~1.6.2","osrm"],"value":1},
{"id":"r-pi-usonic","key":["nan","~1.6.2","r-pi-usonic"],"value":1},
{"id":"req-sync","key":["nan","~1.6.2","req-sync"],"value":1},
{"id":"unqlite","key":["nan","~1.6.2","unqlite"],"value":1},
{"id":"weak","key":["nan","~1.6.2","weak"],"value":1},
{"id":"winiputils","key":["nan","~1.6.2","winiputils"],"value":1},
{"id":"wtf8","key":["nan","~1.6.2","wtf8"],"value":1},
{"id":"protagonist","key":["nan","~1.6.x","protagonist"],"value":1},
{"id":"protagonist-experimental","key":["nan","~1.6.x","protagonist-experimental"],"value":1},
{"id":"freetype2_render","key":["nan","~1.7","freetype2_render"],"value":1},
{"id":"abstract-socket","key":["nan","~1.7.0","abstract-socket"],"value":1},
{"id":"arc4random","key":["nan","~1.7.0","arc4random"],"value":1},
{"id":"ashot","key":["nan","~1.7.0","ashot"],"value":1},
{"id":"base91","key":["nan","~1.7.0","base91"],"value":1},
{"id":"chacha-native","key":["nan","~1.7.0","chacha-native"],"value":1},
{"id":"couchbase","key":["nan","~1.7.0","couchbase"],"value":1},
{"id":"fast-feed","key":["nan","~1.7.0","fast-feed"],"value":1},
{"id":"ffi-atom-shell","key":["nan","~1.7.0","ffi-atom-shell"],"value":1},
{"id":"flat-lame","key":["nan","~1.7.0","flat-lame"],"value":1},
{"id":"i2c-bus","key":["nan","~1.7.0","i2c-bus"],"value":1},
{"id":"jumpsuit","key":["nan","~1.7.0","jumpsuit"],"value":1},
{"id":"kdtree","key":["nan","~1.7.0","kdtree"],"value":1},
{"id":"libxl","key":["nan","~1.7.0","libxl"],"value":1},
{"id":"lwip-decoder","key":["nan","~1.7.0","lwip-decoder"],"value":1},
{"id":"lwip-encoder","key":["nan","~1.7.0","lwip-encoder"],"value":1},
{"id":"lwip-image","key":["nan","~1.7.0","lwip-image"],"value":1},
{"id":"lzma-native","key":["nan","~1.7.0","lzma-native"],"value":1},
{"id":"mac-key-press","key":["nan","~1.7.0","mac-key-press"],"value":1},
{"id":"mapnik","key":["nan","~1.7.0","mapnik"],"value":1},
{"id":"nanomsg","key":["nan","~1.7.0","nanomsg"],"value":1},
{"id":"nbind","key":["nan","~1.7.0","nbind"],"value":1},
{"id":"node-expat","key":["nan","~1.7.0","node-expat"],"value":1},
{"id":"node-lwip","key":["nan","~1.7.0","node-lwip"],"value":1},
{"id":"node-mpg123-util","key":["nan","~1.7.0","node-mpg123-util"],"value":1},
{"id":"oniguruma","key":["nan","~1.7.0","oniguruma"],"value":1},
{"id":"ref","key":["nan","~1.7.0","ref"],"value":1},
{"id":"speaker","key":["nan","~1.7.0","speaker"],"value":1},
{"id":"srs","key":["nan","~1.7.0","srs"],"value":1},
{"id":"strong-oracle","key":["nan","~1.7.0","strong-oracle"],"value":1},
{"id":"time","key":["nan","~1.7.0","time"],"value":1},
{"id":"traceview-bindings","key":["nan","~1.7.0","traceview-bindings"],"value":1},
{"id":"udev","key":["nan","~1.7.0","udev"],"value":1},
{"id":"wrtc","key":["nan","~1.7.0","wrtc"],"value":1},
{"id":"sophia","key":["nan","0.4.x","sophia"],"value":1},
{"id":"pty.js-11","key":["nan","0.7.0","pty.js-11"],"value":1},
{"id":"custom-object","key":["nan","0.8.0","custom-object"],"value":1},
{"id":"phash-image","key":["nan","1","phash-image"],"value":1},
{"id":"crypt3","key":["nan","1 >=1.6.2","crypt3"],"value":1},
{"id":"dlopen","key":["nan","1.0.0","dlopen"],"value":1},
{"id":"nan-example-eol","key":["nan","1.0.0","nan-example-eol"],"value":1},
{"id":"tov8","key":["nan","1.0.0","tov8"],"value":1},
{"id":"authenticate-pam","key":["nan","1.1.0","authenticate-pam"],"value":1},
{"id":"kytea","key":["nan","1.1.0","kytea"],"value":1},
{"id":"cbind","key":["nan","1.1.2","cbind"],"value":1},
{"id":"parse-x509","key":["nan","1.1.2","parse-x509"],"value":1},
{"id":"java2","key":["nan","1.2.0","java2"],"value":1},
{"id":"mathematical","key":["nan","1.2.0","mathematical"],"value":1},
{"id":"meteor-pathwatcher-tweaks","key":["nan","1.2.0","meteor-pathwatcher-tweaks"],"value":1},
{"id":"crc32c","key":["nan","1.2.x","crc32c"],"value":1},
{"id":"bitcoind.js","key":["nan","1.3.0","bitcoind.js"],"value":1},
{"id":"icu-numformat","key":["nan","1.3.0","icu-numformat"],"value":1},
{"id":"lzf","key":["nan","1.3.0","lzf"],"value":1},
{"id":"node-minizip","key":["nan","1.3.0","node-minizip"],"value":1},
{"id":"s2","key":["nan","1.3.0","s2"],"value":1},
{"id":"ucoin","key":["nan","1.3.0","ucoin"],"value":1},
{"id":"tree-sitter-javascript","key":["nan","1.3.x","tree-sitter-javascript"],"value":1},
{"id":"carmen-cache","key":["nan","1.4.1","carmen-cache"],"value":1},
{"id":"opencv","key":["nan","1.4.3","opencv"],"value":1},
{"id":"raspi-core","key":["nan","1.4.x","raspi-core"],"value":1},
{"id":"native-hashset","key":["nan","1.5.0","native-hashset"],"value":1},
{"id":"node-zoom","key":["nan","1.5.1","node-zoom"],"value":1},
{"id":"bluetooth-serial-port","key":["nan","1.5.x","bluetooth-serial-port"],"value":1},
{"id":"hashring","key":["nan","1.5.x","hashring"],"value":1},
{"id":"bunyan-syslog","key":["nan","1.6.2","bunyan-syslog"],"value":1},
{"id":"gdal","key":["nan","1.6.2","gdal"],"value":1},
{"id":"iconv-x64","key":["nan","1.6.2","iconv-x64"],"value":1},
{"id":"node-ping-addon","key":["nan","1.6.2","node-ping-addon"],"value":1},
{"id":"node-pingit","key":["nan","1.6.2","node-pingit"],"value":1},
{"id":"oid","key":["nan","1.6.2","oid"],"value":1},
{"id":"raspi","key":["nan","1.6.x","raspi"],"value":1},
{"id":"raspi-gpio","key":["nan","1.6.x","raspi-gpio"],"value":1},
{"id":"raspi-pwm","key":["nan","1.6.x","raspi-pwm"],"value":1},
{"id":"webworker-threads","key":["nan","1.6.x","webworker-threads"],"value":1},
{"id":"bcrypt","key":["nan","1.7.0","bcrypt"],"value":1},
{"id":"ccap","key":["nan","1.7.0","ccap"],"value":1},
{"id":"cloudcv-bootstrap","key":["nan","1.7.0","cloudcv-bootstrap"],"value":1},
{"id":"dlfcn","key":["nan","1.7.0","dlfcn"],"value":1},
{"id":"java","key":["nan","1.7.0","java"],"value":1},
{"id":"libxmljs","key":["nan","1.7.0","libxmljs"],"value":1},
{"id":"pty.js","key":["nan","1.7.0","pty.js"],"value":1},
{"id":"serialport","key":["nan","1.7.0","serialport"],"value":1},
{"id":"snappy","key":["nan","1.7.0","snappy"],"value":1},
{"id":"ttyutil","key":["nan","1.7.0","ttyutil"],"value":1},
{"id":"xml-selector","key":["nan","1.7.0","xml-selector"],"value":1},
{"id":"node-libcurl","key":["nan","1.7.x","node-libcurl"],"value":1},
{"id":"tree-sitter","key":["nan","1.7.x","tree-sitter"],"value":1},
{"id":"tree-sitter-c","key":["nan","1.7.x","tree-sitter-c"],"value":1},
{"id":"tree-sitter-compiler","key":["nan","1.7.x","tree-sitter-compiler"],"value":1},
{"id":"tree-sitter-golang","key":["nan","1.7.x","tree-sitter-golang"],"value":1},
{"id":"sqlite3-atom-shell","key":["nan","git+https://github.com/iojs/nan#155f1d31352d08a3ec9ac206383a670f25428ab7","sqlite3-atom-shell"],"value":1},
{"id":"hdt","key":["nan","git+https://github.com/rvagg/nan.git#master","hdt"],"value":1},
{"id":"cld-atom-shell","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","cld-atom-shell"],"value":1},
{"id":"ctags","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","ctags"],"value":1},
{"id":"ffi-atomshell-paulcbetts","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","ffi-atomshell-paulcbetts"],"value":1},
{"id":"git-utils","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","git-utils"],"value":1},
{"id":"keyboard-layout","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","keyboard-layout"],"value":1},
{"id":"keytar","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","keytar"],"value":1},
{"id":"nslog","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","nslog"],"value":1},
{"id":"opencv-atom-shell","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","opencv-atom-shell"],"value":1},
{"id":"pathwatcher","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","pathwatcher"],"value":1},
{"id":"ref-atom-shell","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","ref-atom-shell"],"value":1},
{"id":"runas","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","runas"],"value":1},
{"id":"scrollbar-style","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","scrollbar-style"],"value":1},
{"id":"spellchecker","key":["nan","https://atom.io/download/atom-shell/nan-1.6.1.tgz","spellchecker"],"value":1} |
I can think of many reasons why that will end up introducing more breakage down the road than it fixes. Someone (and I'm not volunteering) should come up with a detailed proposal how to implement that and be prepared for some serious hole shooting. |
another option .. which I've resisted and actively recommended against, is getting packages to use |
The whole point of nan is more liberal support of node/io.js versions, so it makes sense to me that the dependency would have a more liberal range. |
That crow's foot (the circumflex) is not nice, no. But it was more of a problem in the past. Since NAN 1.0, there has been hardly any backwards incompatibilities. If the versioning were any stricter, it would just lead to every release being a major release and it would be back to square one. Still, it's impossible to test every native module on every single configuration. Sometimes stuff breaks due to oversight. It is usually fixed within 24 hours, but still causes the reverse problem temporarily: Packages break through no fault of their own with no changes to them. It is a double-edged sword. |
Meanwhile.. I'm just testing and serial-pull-requesting every package dependency that breaks in our stack with io.js Native bindings are important. Whatever core can do to improve the situation in future versions helps. |
The breakage that came with |
In fact, my computer already installed both vs 2013 and vs 2010, but its choose vs 2010 by default somehow. |
I'm not understanding nan's use of semver at all. Could someone enlighten me. As far as I can tell, this churn was completely unnecessary and could have been avoided two ways:
@rvagg Every one of the many , many packages using nan that were updated in this PR seem to be using non-caret dep specs. This is at your urging? And you are comfortable re-urging all of them to update again to the next nan minor, ad nauseum? This seems to be trading off a possible introduction of a breaking change in nan done in a minor release, hopefully low probability, against an absolutely guaranteed break for every user of nan when io.js or v8 eventually requires it. That's a poor bet.
The purpose of nan, I thought, was not having to modify my packages when there are changes to io.js/v8, but that doesn't seem to have been achieved. What am I missing? Why was this necessary? |
Because a V8 function exposed through Nan lost support for a certain extra argument, and the wrapping Nan function had ti remove this as well. It was a rarely used feature, so I figured it would not create too much problems by releasing a minor. Strict semver would have required a major version bump for that change. Then there were some API additions with new wrappers that became necessary. On May 24, 2015 7:24:19 PM EEST, Sam Roberts notifications@github.com wrote:
|
Autodetection defaults to 2010, yes. You need to explicitly specify msvs_version=2013 to gyp. On May 24, 2015 5:56:43 PM EEST, Yonggang Luo notifications@github.com wrote:
|
I would agree with you about that. semver is no panacea, and that might have been a good judgement call. Except it wasn't, because nan apparently recommends pinning deps to MINORS instead of allowing them to float within a MAJOR, everyone following nan's advice had to update their package. If you have to update a package, who cares if you update from If people were using So you now have all the disadvantages of semver and none of the advantages. |
Yes, you may be right. The recommendation of pinning to minors originated before the ^-notation had become available, and since then we have gradually adopted a stricter adherence to semver. We try to keep backwards compatibility across versions, but sometimes mistakes happen. There have been around two or three occasions where in the last year where a new minor of NAN has unintentionally broken some configurations. This typically results in bug reports within an hour of release. It is usually fixed within a day or so, but builds breaking because of this can be very confusing to unexpecting users. Most packages depend on NAN indirectly through the dependency chain, over 40 % of all the packages in npm, so any bugs affect a lot of packages. So, while the intention is that users should be able to pin to majors of NAN, there may be temporary issues with large impact across the ecosystem when doing this. Sometimes we release minors just to add more APIs or rewrite the internals of existing ones to fix bugs or improve performance. These are often not strictly necessary for functionality for every addon. These can be avoided by pinning to minors. On May 24, 2015 10:07:10 PM EEST, Sam Roberts notifications@github.com wrote:
|
Mistakes happen, but if nan releases a breaking change in a minor by accident, as you say, there will be bug reports pretty quickly, and nan can make things right with a single publish, and everything will work again. No big deal, nan is pretty diligent, as you say, they/you fix these things quite quickly. When an update to io.js requires a minor update to nan, there are more than temporary issues, as volunteers need to work through the entire set of minor-pinned packages. As you say, binary addons tend to be buried deep, so its even hard for people to fix themselves without forking all the intermediary deps. Its a bit frustrating that the issues can't be solved quickly by nan, we have to wait for the ecosystem to catch up. Anyhow, its a bit late. My random sampling of the merges that mention this PR found that they are all minor pinned. But the next time nan bumps a minor to get io.js compatibility again, as is sure to happen, please consider asking people up to use the |
I will continue to recommend ~ over ^ in pretty much all cases. Minor bumps
of any library tend to have more impact on the internals in ways that can
expose breakage of edge cases--or even common cases that aren't being
properly accounted for in tests. It should be the library author's
responsibility to keep a close eye on shifting dependency versions and
testing if stuff still works. If that means accepting a lot of pull
requests then so be it.
One example of this kind of breakage with NAN was the rewrite of NanNew
which replaced most of the internals but kept a consistent API, or so we
thought, until we got a slew of bug reports from people who's deploys were
suddenly broken because of transitive dependency drift where NAN was
automatically upgraded. This is only one case but it's a typical story in
rapidly developing projects, it happens over and over.
As a library author I take responsibility for the current state of my code
and how it's supposed to work and under what conditions. ^ assumes that
authors of my dependencies have complete knowledge of how their API is
being used and a complete test suite that covers all of my exact uses. This
is garbage of course and I opt to limit my risk. ~ is my chosen level of
risk, I know some who opt for exact versions for similar reasons and I
understand this position.
Semver cannot account for human imperfections and we shouldn't pretend it's
an accurate representation of what happens in the software development
process.
So, I will continue to maintain that ^ represents a very high level of risk
for software stability and will continue to advocate against its use.
|
👍 @rvagg I will admit that I've taken to bumping major versions not just when making a "breaking change", but also when I feel that something that has changed under the hood and represents enough risk that it needs to be an intentional change by a package consumer. It does feel a bit strange, but with the |
👍 to @rvagg However, I still strongly suggest that package authors should be given opportunity to migrate to newer NAN well before ABI breaking core changes are publicly released. In this case I hope to see NAN |
That will likely not happen. io.js 3.0 will probably be released within a week or two. NAN 2.0 will be released soon after that. There is, however, a 'next' branch available that builds with io.js next. It will become 2.0, but is not finalized or frozen yet. It aims at working with V8 4.5, which is the current development branch, so that there won't be unnecesary, avoidable, breakage. All 500+ packages will need rewriting and updating. This will not happen overnight. I'm considering writing a simple migration script, like 2to3.py, which should take care of some changes automatically. But, it will take some time to write and will not cover everything. If someone were to put this together, I'd gladly accept a PR. On May 25, 2015 9:14:05 AM EEST, Ilkka Myller notifications@github.com wrote:
|
If npm packages were integrated with Travis CI or something similar, we'd have more accurate information about the build status of packages, which might be useful in general, especially for in this situation. |
@RnbWd Excellent idea. Many packages are already individually testing with Travis CI pulling from GitHub, but more general automated testing done straight from npm repository against available Node/io.js versions would be an awesome service. It could easily show compatibility statistics against any core version. I think running simple npm install (and npm test only if enabled by package author) would be enough. I think someone is already working on this ;) If not, then someone should. |
Add this to your
Now every |
@defunctzombie definitely agree! I use that setting as well. You can use
edit: is there any benefit using |
@defunctzombie @RnbWd thanks - sounds like a plan :) |
3.0.0 has been released, so I'll close this one for now. :) |
I'm opening this issue to track modules needing updates to
nan
dependency (or something else) for io.js2.0.0
compatibility.The text was updated successfully, but these errors were encountered: