Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Webpack can't import package installed from git

So I forked a package in the git. Made my changes. Then in my terminal

npm install --save git+https://github.com/hayk94/ddp.js.git

And then I try to import the package in my code as this

import DDP from 'ddp.js'

But webpack gives me this error

ERROR in ./main.js
Module not found: Error: Can't resolve 'ddp.js' in '/Users/hayksafaryan/projects/b2cEmbedLib'
 @ ./main.js 23:11-28
 @ multi (webpack)-dev-server/client?http://localhost:8080 babel-polyfill ./main.js
webpack: Failed to compile.

However webpack works fine if I install the package from npm. I import the package as in the docs, however maybe there is some other way for git installed packages?

like image 773
Hayk Safaryan Avatar asked Oct 10 '17 08:10

Hayk Safaryan


1 Answers

The entry point of the package is lib/ddp.js, but that file doesn't exist in the repository. It is very common that libraries build their libraries before publishing to npm, so that they can use newer JavaScript features but still provide support for older versions that don't support them. This is done with the prepublish hook, which is automatically run before the package is published (when you run npm publish). With that, the built files don't end up in the repository, as it would mainly clutter up your commits. Some people decide to check them in so they can use it directly from there, which has become quite rare because these use-cases are generally covered by services like Unpkg.

You have several possibilities to use it from a git repository.

  • Check in the built files.
  • Build the files after installing. Either manually or with a postinstall hook. (not recommended)
  • Change the entry point to src/ddp.js. If you need to transpile the files, this isn't a valid option, even though you could theoretically whitelist the package in your webpack config, so it gets transpiled (assuming you were excluding node_modules from being transpiled).
  • Publish the package to npm under your namespace (@yourusername/ddp.js) and use that. For details see Working with scoped packages.
like image 154
Michael Jungo Avatar answered Nov 13 '22 18:11

Michael Jungo