I want to set up a private npm registry using sinopia and I executed npm install -g sinopia
, but some error message occurred:
> [email protected] install /usr/local/lib/node_modules/sinopia/node_modules/crypt3
> node-gyp rebuild
gyp WARN EACCES user "root" does not have permission to access the dev dir "/root/.node-gyp/4.2.3"
gyp WARN EACCES attempting to reinstall using temporary dev dir "/usr/local/lib/node_modules/sinopia/node_modules/crypt3/.node-gyp"
make: Entering directory `/usr/local/lib/node_modules/sinopia/node_modules/crypt3/build'
CXX(target) Release/obj.target/crypt3/crypt3.o
In file included from ../crypt3.cc:7:0:
../node_modules/nan/nan.h:261:25: error: redefinition of âtemplate<class T> v8::Local<T> _NanEnsureLocal(v8::Local<T>)â
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Local<T> val) {
^
../node_modules/nan/nan.h:256:25: error: âtemplate<class T> v8::Local<T> _NanEnsureLocal(v8::Handle<T>)â previously declared here
NAN_INLINE v8::Local<T> _NanEnsureLocal(v8::Handle<T> val) {
^
../node_modules/nan/nan.h:661:13: error: ânode::smallocâ has not been declared
, node::smalloc::FreeCallback callback
^
I can see the .h
files which relate to C or C++; how come this happens? All the stuff I found within sinopia is about JavaScript.
What does npm install
do? In my opinion, it should only initiate some download process.
npm install <package>
ornpm install -g <package>
willDownload an npm package you specify with the argument, or inside your package.json file, along with its dependencies (from the npm repository host you define) inside a node_modules folder. (Or use an already existing local copy of it. see shrink-wrapping)
Run the
pre-install
,install
andpost-install
scripts for itself and each of its dependencies. See Lifecycle ScriptsThe -g directive tells npm to install the package in the global shared node_modules folder (usually where node is). This will also allow you to access the module from the command-line, as the bin is symlinked into a PATH folder (usually usr/local/bin). Check this link
In the case of sinopia, they do not have a standard
package.json
file, they have a package.yaml file. Check theyamp
plugin.If you check their pre-publish script, it contains
Which converts their package.yaml into package.json. In their package.json, they have a dependency on the crypt3 package.
In the case of crypt3 (one of sinopia dependencies), check the package.json . It contains
So, when sinopia is npm installed, it will download and install all if its dependencies as well. When crypt3 is installed, the "node-gyp rebuild" will be run, which is why you are seeing native c / c++ compile outputs in your console.
You can try it yourself by doing
In the console