The package installation is successful for the merge-package.json npm package, but the request actually goes to the registry npm and therefore the package is not cached in Artifactory.
From the npm verbose output we can see that the actual install request for the merge-package.json is going to the npm registry and due to this the package metadata is never updated. The metadata is downloaded to the root of the npm remote repo and not to the .npm/ folder where we store metadata.
npm install email@example.com --verbose
npm http fetch GET 200 http://localhost:8081/artifactory/api/npm/npm-remote/merge-package.json 1589ms
npm http fetch GET 200 https://registry.npmjs.org/merge-package.json/-/merge-package.json-1.0.0.tgz 597ms
npm http fetch GET 200 http://localhost:8081/artifactory/api/npm/npm-remote/three-way-merger 419ms
Below are the messages seen in the artifactory.log during the install request where we can see that Artifactory is expecting the package to be compressed in gz format. However it receives a package that ends with .json.
In the registry NPM we can see this package http://registry.npmjs.com/merge-package.json
2018-04-06 13:34:42,485 [http-nio-8081-exec-6] [ERROR] (o.j.r.n.NpmMetadataExtractor:133) - Unable to find or parse correctly the package archive ('package.json') within the tarball content: Input is not in the .gz format
java.io.IOException: Input is not in the .gz format
2018-04-06 13:34:42,487 [http-nio-8081-exec-6] [WARN ] (o.a.a.n.r.r.NpmRemoteInterceptor:62) - Failed to set npm metadata on path npm-remote-cache/merge-package.json : java.io.IOException: Input is not in the .gz format