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>
or npm install -g <package>
will
Download 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
and post-install
scripts for itself and each of its dependencies. See Lifecycle Scripts
The -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 the yamp
plugin.
If you check their pre-publish script, it contains
prepublish: js-yaml package.yaml > package.json
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
"scripts": {
"test": "node test/test.js",
"install": "node-gyp rebuild"
},
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
npm install -g node-gyp && node-gyp rebuild
In the console