Jam - The JavaScript package manager
groundcomputing.co.uk
groundcomputing.co.uk
- One of the best changes to npm was to install modules locally instead of globally by default. I wish jam also did that, global installs are troublesome.
- Isn't package.json going to conflict with my npm's package.json? I definitely don't want to polute my back-end's packages with front-end only stuff.
Basically, I'd like more sensible defaults. Change the package.json to some other filename and install packages locally by default. I'm also unsure why it would put files inside /jam, I don't want to change my configuration to use some obscur and badly named "jam" folder. I believe people like the vendor/javascript or public/javascripts conventions, that would be a better default in my opinion.
Otherwise, I like the initiative. In the past we've been using Jim (https://github.com/quirkey/jim) which works more like bundler. Now we just do it manually for lack of a better solution. I don't think this is it yet, but it's close.
As for package.json, yes there may occasionally be conflicts with NPM, but in many cases they should be compatible since they are based on the same spec. Perhaps allowing you to override with "jam.json" would be a good idea for times when they would conflict?
Volo is arguably more established and written by the same guy who wrote require.js. It's still early in development, but is already very good.
EDIT: From a quick glance, it seems like volo works better with existing javascript libraries too. Volo's add/install command simply uses github's search API to find any existing project and can install it (it also supports other URL formats).
JavaScript badly needs a package manager and the community badly needs to agree on a module format (AMD). Do you think that will happen? How can we make that happen?
Every other language has package managers.. ruby has gems and bundler, node has npm, java has maven. That makes it so easy to develop any application or library that can be used by any other application or library. ClientSide JavaScript finally has an amazing way to manage dependencies and build modular applications (AMD). All it needs now is a good package manager for being able to split large applications into individual components and manage external library dependencies. I want to be able to configure jQuery, Backbone, jQuery plugins, Backbone plugins, any other JS library, my own subcomponents as dependencies, use them via AMD's require and optimize in a smart way when building (e.g. only build in a single copy of the given library and warn if multiple versions are required).
I'm really hoping Volo (https://github.com/volojs/volo) or Jam (or both if they become interoperable) will become the solution for this stuff.
[Or not, apparently.]
It's not for managing node.js packages, it's for managing client-side .js packages, and it just happens to be written in javascript to be run by node.js
That's why jam requires node - it's written on javascript and uses node packages so it can work with the filesystem, and do other server/dev environment things that js in a browser can't do.
When you develop with node, it's just like doing development for any other language.
Edit: in case this wasn't clear - you aren't working in a node environment. In this case, node is simply used because it can execute javascript in a server environment. So jam can be written in js and do filesystem stuff if it runs using the node utility. Jam simply runs on node, but a project using jam doesn't necessarily need to be a node application.
[Or, it seems like maybe node in this case is just a dependency for jam, which is simply a tool used to make all your JavaScript development easier, without introducing any extra runtime dependencies.]
A short summary of pros / cons of each would help.
Ender sounds similar and has been out for quite some time: http://ender.no.de/