Release 1.0.9 to avoid installation error
phanect opened this issue · 2 comments
I experienced following error when I tried to install imagediff.
$ npm install imagediff
> canvas@1.1.6 install /home/phanect/Dropbox/dev/pfglps/node_modules/canvas
> node-gyp rebuild
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
make: Entering directory '/home/phanect/Dropbox/dev/pfglps/node_modules/canvas/build'
SOLINK_MODULE(target) Release/obj.target/canvas-postbuild.node
COPY Release/canvas-postbuild.node
CXX(target) Release/obj.target/canvas/src/Canvas.o
In file included from ../src/Canvas.h:22:0,
from ../src/Canvas.cc:7:
../../nan/nan.h: In function ‘v8::Local<v8::Signature> NanNew(v8::Handle<v8::FunctionTemplate>, int, v8::Handle<v8::FunctionTemplate>*)’:
../../nan/nan.h:342:78: error: no matching function for call to ‘v8::Signature::New(v8::Isolate*, v8::Handle<v8::FunctionTemplate>&, int&, v8::Handle<v8::FunctionTemplate>*&)’
return v8::Signature::New(v8::Isolate::GetCurrent(), receiver, argc, argv);
^
../../nan/nan.h:342:78: note: candidate is:
In file included from ../src/Canvas.h:11:0,
from ../src/Canvas.cc:7:
/home/phanect/.node-gyp/4.5.0/include/node/v8.h:4675:27: note: static v8::Local<v8::Signature> v8::Signature::New(v8::Isolate*, v8::Local<v8::FunctionTemplate>)
static Local<Signature> New(
^
/home/phanect/.node-gyp/4.5.0/include/node/v8.h:4675:27: note: candidate expects 2 arguments, 4 provided
In file included from ../src/Canvas.h:22:0,
from ../src/Canvas.cc:7:
../../nan/nan.h: At global scope:
../../nan/nan.h:424:3: error: redefinition of ‘v8::Local<T> NanNew(P) [with T = v8::StringObject; P = v8::Local<v8::String>]’
NanNew<v8::StringObject, v8::Handle<v8::String> >(
^
../../nan/nan.h:417:3: note: ‘v8::Local<T> NanNew(P) [with T = v8::StringObject; P = v8::Local<v8::String>]’ previously declared here
NanNew<v8::StringObject, v8::Local<v8::String> >(
^
../../nan/nan.h:442:36: error: redefinition of ‘template<class T> v8::Local<v8::RegExp> NanNew(v8::Local<v8::String>, v8::RegExp::Flags)’
NAN_INLINE v8::Local<v8::RegExp> NanNew(
^
../../nan/nan.h:436:36: note: ‘template<class T> v8::Local<v8::RegExp> NanNew(v8::Handle<v8::String>, v8::RegExp::Flags)’ previously declared here
NAN_INLINE v8::Local<v8::RegExp> NanNew(
^
../../nan/nan.h:454:36: error: redefinition of ‘template<class T, class P> v8::Local<v8::RegExp> NanNew(v8::Local<v8::String>, v8::RegExp::Flags)’
NAN_INLINE v8::Local<v8::RegExp> NanNew(
^
../../nan/nan.h:448:36: note: ‘template<class T, class P> v8::Local<v8::RegExp> NanNew(v8::Handle<v8::String>, v8::RegExp::Flags)’ previously declared here
NAN_INLINE v8::Local<v8::RegExp> NanNew(
^
../../nan/nan.h:623:19: error: ‘NanNew’ declared as an ‘inline’ variable
v8::String::ExternalAsciiStringResource *resource) {
^
../../nan/nan.h:623:19: warning: ‘always_inline’ attribute ignored [-Wattributes]
../../nan/nan.h:623:19: error: ‘v8::Local<v8::String> NanNew’ redeclared as different kind of symbol
../../nan/nan.h:617:36: note: previous declaration ‘v8::Local<v8::String> NanNew(v8::String::ExternalStringResource*)’
NAN_INLINE v8::Local<v8::String> NanNew(
^
../../nan/nan.h:623:7: error: ‘ExternalAsciiStringResource’ is not a member of ‘v8::String’
v8::String::ExternalAsciiStringResource *resource) {
^
../../nan/nan.h:623:48: error: ‘resource’ was not declared in this scope
v8::String::ExternalAsciiStringResource *resource) {
^
../../nan/nan.h:637:27: error: redefinition of ‘template<class T> v8::Local<T> _NanEscapeScopeHelper(v8::Local<T>)’
NAN_INLINE v8::Local<T> _NanEscapeScopeHelper(v8::Local<T> val) {
^
../../nan/nan.h:632:27: note: ‘template<class T> v8::Local<T> _NanEscapeScopeHelper(v8::Handle<T>)’ previously declared here
NAN_INLINE v8::Local<T> _NanEscapeScopeHelper(v8::Handle<T> val) {
^
../../nan/nan.h:889:13: error: ‘node::smalloc’ has not been declared
, node::smalloc::FreeCallback callback
^
../../nan/nan.h:889:35: error: expected ‘,’ or ‘...’ before ‘callback’
, node::smalloc::FreeCallback callback
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(char*, size_t, int)’:
../../nan/nan.h:893:50: error: ‘callback’ was not declared in this scope
v8::Isolate::GetCurrent(), data, length, callback, hint);
^
../../nan/nan.h:893:60: error: ‘hint’ was not declared in this scope
v8::Isolate::GetCurrent(), data, length, callback, hint);
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(const char*, uint32_t)’:
../../nan/nan.h:900:67: error: call of overloaded ‘New(v8::Isolate*, const char*&, uint32_t&)’ is ambiguous
return node::Buffer::New(v8::Isolate::GetCurrent(), data, size);
^
../../nan/nan.h:900:67: note: candidates are:
In file included from ../../nan/nan.h:179:0,
from ../src/Canvas.h:22,
from ../src/Canvas.cc:7:
/home/phanect/.node-gyp/4.5.0/include/node/node_buffer.h:34:40: note: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, v8::Local<v8::String>, node::encoding) <near match>
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
/home/phanect/.node-gyp/4.5.0/include/node/node_buffer.h:34:40: note: no known conversion for argument 3 from ‘uint32_t {aka unsigned int}’ to ‘node::encoding’
/home/phanect/.node-gyp/4.5.0/include/node/node_buffer.h:46:40: note: v8::MaybeLocal<v8::Object> node::Buffer::New(v8::Isolate*, char*, size_t) <near match>
NODE_EXTERN v8::MaybeLocal<v8::Object> New(v8::Isolate* isolate,
^
/home/phanect/.node-gyp/4.5.0/include/node/node_buffer.h:46:40: note: no known conversion for argument 2 from ‘const char*’ to ‘char*’
In file included from ../src/Canvas.h:22:0,
from ../src/Canvas.cc:7:
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(uint32_t)’:
../../nan/nan.h:904:61: error: could not convert ‘node::Buffer::New(v8::Isolate::GetCurrent(), ((size_t)size))’ from ‘v8::MaybeLocal<v8::Object>’ to ‘v8::Local<v8::Object>’
return node::Buffer::New(v8::Isolate::GetCurrent(), size);
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanBufferUse(char*, uint32_t)’:
../../nan/nan.h:911:12: error: ‘Use’ is not a member of ‘node::Buffer’
return node::Buffer::Use(v8::Isolate::GetCurrent(), data, size);
^
../../nan/nan.h: In function ‘bool _NanGetExternalParts(v8::Handle<v8::Value>, const char**, size_t*)’:
../../nan/nan.h:1993:12: error: ‘class v8::String’ has no member named ‘IsExternalAscii’
if (str->IsExternalAscii()) {
^
../../nan/nan.h:1994:23: error: ‘ExternalAsciiStringResource’ in ‘class v8::String’ does not name a type
const v8::String::ExternalAsciiStringResource* ext;
^
../../nan/nan.h:1995:5: error: ‘ext’ was not declared in this scope
ext = str->GetExternalAsciiStringResource();
^
../../nan/nan.h:1995:16: error: ‘class v8::String’ has no member named ‘GetExternalAsciiStringResource’
ext = str->GetExternalAsciiStringResource();
^
../../nan/nan.h: In function ‘v8::Local<v8::Object> NanNewBufferHandle(const char*, uint32_t)’:
../../nan/nan.h:901:3: warning: control reaches end of non-void function [-Wreturn-type]
}
^
canvas.target.mk:123: recipe for target 'Release/obj.target/canvas/src/Canvas.o' failed
make: *** [Release/obj.target/canvas/src/Canvas.o] Error 1
make: Leaving directory '/home/phanect/Dropbox/dev/pfglps/node_modules/canvas/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/home/phanect/.nvm/versions/node/v4.5.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 3.16.0-4-amd64
gyp ERR! command "/home/phanect/.nvm/versions/node/v4.5.0/bin/node" "/home/phanect/.nvm/versions/node/v4.5.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/phanect/Dropbox/dev/pfglps/node_modules/canvas
gyp ERR! node -v v4.5.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm WARN install:canvas@1.1.6 canvas@1.1.6 install: `node-gyp rebuild`
npm WARN install:canvas@1.1.6 Exit status 1
pfglps@0.0.1 /home/phanect/Dropbox/dev/pfglps
└── imagediff@1.0.8
I tried to remove node_modules directory, and tried to dev version npm install HumbleSoftware/js-imagediff
and successfully installed. This problem should be already solved, but not released yet for 2 years.
According to above log, imagediff
1.0.8 (current stable) seems to depend on canvas
1.1.x.
You don't experience above error on canvas
1.2+, which current development version of imagediff
depends.
I used Debian Jessie and I have installed dependencies:
- libcairo2-dev
- libjpeg-dev
- libpango1.0-dev
- libgif-dev
- build-essential
- g++
(From canvas
' Wiki)
As a workaround one may try overriding the transitive dependency with a npm-shrinkwrap.json
file:
{
"dependencies": {
"imagediff": {
"version": "1.0.8",
"from": "imagediff@^1.0.8",
"dependencies": {
"canvas": {
"version": "1.3.3",
"from": "canvas@~1.1.6"
}
}
}
}
}
v1.3.3 of node-canvas should be the version with the fix: Automattic/node-canvas#670
Dumb question, but whenever I add the workaround to npm-shrinkwrap.json
, npm install
will overwrite it. How do I get it to use the shrinkwrap file, instead?