Does it make sense to put any modules into package.json
dependencies
when I use webpack?
When I want to develope a package, I use git clone <url>
then npm install
, then npm installs all dependencies
and devDependencies
from package.json
file and it makes sense.
When I'm end-user and I just want to install some package into my node_modules
to use it in my project, I run npm install package-name
, then npm installs package-name
with only its dependencies
, and it makes sense too.
But does it make sense to put any modules into dependencies
when I use webpack
? The webpack will bundle all dependencies into eg. bundle.js
, so, for me, there is no need to install dependencies then (while they're included into bundle.js
file).
Let's assume that I put all neccessary modules into devDependencies
(keep the dependencies
object empty) for my project: my-project
, bundle it with webpack and publish:
git clone <url to my_project>
, then run npm install
, then npm will install devDependencies
from package.json
(and ommit empty dependencies
object), then it is ready to develope.npm install my-project
, then npm will install my-project
, do not install devDependencies
(because this is for production) and do not install dependencies
(because dependencies
object in package.json
remain empty). Putting anything into dependencies
would double the dependencies: both the dependencies would be installed, and the same dependencies would be accessible in the bundle.js
file.Am I right?
You are correct that there may be no dependencies once it's been transpiled with webpack. However, some packages are multi-purpose and may be used in multiple ways, so in some circumstances dependencies may still be required.
If you look at the package.json
specification, there are two possible entry points, 'main' and 'browser'. There is also the proposed 'module' entry point. It is currently under discussion about how to handle these in webpack and users seem to want webpack to prioritize them as module > browser > main
, however browser
is currently used by webpack first.
The idea behind prioritizing them in the order module > browser > main
is presumably that browsers could use the pre-transpiled stuff directly in "browser", whereas another project calling require()
or include()
on your package would use non-transpiled code from the "module" entry. The "module" entry code could contain modern JavaScript with new features and the project/package requiring it could then transpile it to their own specifications, using "browserslist" for example.
I found this question because I was wondering the same thing...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With