Liking cljdoc? Tell your friends :D


Leiningen plugin for enabling Node based ClojureScript projects.


To enable lein-npm for your project, put the following in the :plugins vector of your project.clj file:

Latest version

Managing NPM dependencies

You can specify a project's NPM dependencies by adding a :node-dependencies key in your project.clj:

:node-dependencies [[underscore "1.4.3"]
                    [nyancat "0.0.3"]
                    [mongodb "1.2.7"]]

These dependencies, and any :node-dependencies of packages pulled in through the regular :dependencies, will be installed through NPM when you run either lein npm install or lein deps.

Invoking NPM

You can execute NPM commands that require the presence of a package.json file using the lein npm command. This command creates a temporary package.json based on your project.clj before invoking the NPM command you specify. The keys name, description, version and dependencies are automatically added to package.json. Other keys can be specified by adding a :nodejs key in your project.clj:

  :nodejs {:scripts {:test "testem"}}
$ lein npm install        # installs project dependencies
$ lein npm ls             # lists installed dependencies
$ lein npm search nyancat # searches for packages containing "nyancat"

Bower dependencies

lein-bower is a related Leiningen plugin that performs the same service for Bower dependencies. lein-bower itself depends on lein-npm.

Running ClojureScript apps

The plugin installs a lein run hook which enables you to specify a JavaScript file instead of a Clojure namespace for the :main key in your project.clj, like this:

:main "js/main.js"

If :main is a string that refers to a file that exists and ends with .js, it will launch this file using Node, after first running npm install if necessary. Any command line arguments following lein run will be passed through to the Node process.

Changing the directory used

npm does not allow you to put stuff anywhere besides node_modules, even if that name is against your religion, however, you can change the root used by lein-npm to be something other than your project root like this:

:npm-root "resources/public/js"

Or you can use a keyword to look the path up in your project map:

:npm-root :target-path


Copyright 2012 Bodil Stokke and Hoang Minh Thang

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Can you improve this documentation? These fine people already did:
Hoàng Minh Thắng, Bodil Stokke & Justin Balthrop
Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close