195 lines
5.8 KiB
Markdown
195 lines
5.8 KiB
Markdown
# grunt-npmcopy
|
|
[](https://travis-ci.org/timmywil/grunt-npmcopy)
|
|
|
|
> npm for the front-end without the cruft.
|
|
|
|
- Use npm as your front-end package manager without making `node_modules` public.
|
|
- Position your front-end dependencies where you want them in your repository.
|
|
- Conveniently facilitates [tracking your front-end dependencies](http://addyosmani.com/blog/checking-in-front-end-dependencies/).
|
|
|
|
## Workflow
|
|
|
|
Whenever you add a new front-end dependency with npm, add which file should be copied and where to your Gruntfile `"npmcopy"` config. Then, run `grunt npmcopy`.
|
|
|
|
## Getting Started
|
|
This plugin requires Grunt.
|
|
|
|
If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
|
|
|
|
```shell
|
|
npm install grunt-npmcopy --save-dev
|
|
```
|
|
|
|
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
|
|
|
|
```js
|
|
grunt.loadNpmTasks('grunt-npmcopy');
|
|
```
|
|
|
|
*Note: have a look at [load-grunt-tasks](https://github.com/sindresorhus/load-grunt-tasks) so you can skip this step for all your grunt plugins.*
|
|
|
|
## The "npmcopy" task
|
|
|
|
### Overview
|
|
In your project's Gruntfile, add a section named `npmcopy` to the data object passed into `grunt.initConfig()`.
|
|
|
|
```js
|
|
grunt.initConfig({
|
|
npmcopy: {
|
|
options: {
|
|
// Task-specific options go here
|
|
},
|
|
your_target: {
|
|
// Target-specific file lists and/or options go here
|
|
}
|
|
}
|
|
});
|
|
```
|
|
|
|
### Options
|
|
|
|
#### options.srcPrefix
|
|
Type: `String`
|
|
Default value: '`node_modules`'
|
|
|
|
`srcPrefix` will prefix your source locations with the correct folder location.
|
|
|
|
#### options.destPrefix
|
|
Type: `String`
|
|
Default value: `''`
|
|
|
|
`destPrefix` will be used as the prefix for destinations.
|
|
|
|
#### options.report
|
|
Type: `Boolean`
|
|
Default value: `false`
|
|
|
|
To help ensure you didn't miss any, report any modules in your package.json that have not been configured to copy at least one file with `npmcopy`.
|
|
|
|
#### options.copyOptions
|
|
Type: `Object`
|
|
Default value: `{}`
|
|
|
|
Options to pass to `grunt.file.copy` when copying the files. See [grunt.file.copy](http://gruntjs.com/api/grunt.file#grunt.file.copy)
|
|
|
|
### Usage Examples
|
|
|
|
```js
|
|
grunt.initConfig({
|
|
npmcopy: {
|
|
// Anything can be copied
|
|
test: {
|
|
options: {
|
|
destPrefix: 'test/js'
|
|
},
|
|
files: {
|
|
// Keys are destinations (prefixed with `options.destPrefix`)
|
|
// Values are sources (prefixed with `options.srcPrefix`); One source per destination
|
|
// e.g. 'node_modules/chai/lib/chai.js' will be copied to 'test/js/libs/chai.js'
|
|
'libs/chai.js': 'chai/lib/chai.js',
|
|
'mocha/mocha.js': 'libs/mocha/mocha.js',
|
|
'mocha/mocha.css': 'libs/mocha/mocha.css'
|
|
}
|
|
},
|
|
// Javascript
|
|
libs: {
|
|
options: {
|
|
destPrefix: 'public/js/libs'
|
|
},
|
|
files: {
|
|
'jquery.js': 'jquery/jquery.js',
|
|
'require.js': 'requirejs/require.js'
|
|
},
|
|
},
|
|
plugins: {
|
|
options: {
|
|
destPrefix: 'public/js/plugins'
|
|
},
|
|
files: {
|
|
// Make dependencies follow your naming conventions
|
|
'jquery.chosen.js': 'chosen/public/chosen.js'
|
|
}
|
|
},
|
|
// Less
|
|
less: {
|
|
options: {
|
|
destPrefix: 'less'
|
|
},
|
|
files: {
|
|
// If either the src or the dest is not present,
|
|
// the specified location will be used for both.
|
|
// In other words, this will copy
|
|
// 'npm_components/bootstrap/less/dropdowns.less' to 'less/bootstrap/less/dropdowns.less'
|
|
// See http://gruntjs.com/configuring-tasks#files for recommended files formats
|
|
src: 'bootstrap/less/dropdowns.less'
|
|
}
|
|
},
|
|
// Images
|
|
images: {
|
|
options: {
|
|
destPrefix: 'public/images'
|
|
},
|
|
files: {
|
|
'account/chosen-sprite.png': 'chosen/public/chosen-sprite.png',
|
|
'account/chosen-sprite@2x.png': 'chosen/public/chosen-sprite@2x.png'
|
|
}
|
|
},
|
|
// Entire folders
|
|
folders: {
|
|
files: {
|
|
// Note: when copying folders, the destination (key) will be used as the location for the folder
|
|
'public/js/libs/lodash': 'lodash',
|
|
// The destination can also be a folder
|
|
// Note: if the basename of the location does not have a period('.'),
|
|
// it is assumed that you'd like a folder to be created if none exists
|
|
// and the source filename will be used
|
|
'public/js/libs': 'lodash/dist/lodash.js'
|
|
}
|
|
},
|
|
// Glob patterns
|
|
glob: {
|
|
files: {
|
|
// When using glob patterns, destinations are *always* folder names
|
|
// into which matching files will be copied
|
|
// Also note that subdirectories are **not** maintained
|
|
// if a destination is specified
|
|
// For example, one of the files copied here is
|
|
// 'lodash/dist/lodash.js' -> 'public/js/libs/lodash/lodash.js'
|
|
'public/js/libs/lodash': 'lodash/dist/*.js'
|
|
}
|
|
},
|
|
// Glob without destination
|
|
globSrc: {
|
|
options: {
|
|
destPrefix: 'public/js/libs'
|
|
},
|
|
// By not specifying a destination, you are denoting
|
|
// that the lodash directory structure should be maintained
|
|
// when copying.
|
|
// For example, one of the files copied here is
|
|
// 'lodash/dist/lodash.js' -> 'public/js/libs/lodash/dist/lodash.js'
|
|
src: 'lodash/**/*.js'
|
|
},
|
|
// Main pragma
|
|
// Adding :main to the end of a source path will retrieve the main file(s) for that package
|
|
// If the main property is not specified by a package, npmcopy will fail
|
|
main: {
|
|
src: 'jquery.minlight:main',
|
|
dest: 'public/js/plugins/'
|
|
}
|
|
}
|
|
});
|
|
```
|
|
|
|
## Contributing
|
|
Follow the same coding style present in the repo and add tests for any bug fix or feature addition.
|
|
|
|
See the [CONTRIBUTING.md](https://github.com/timmywil/grunt-npmcopy/blob/master/CONTRIBUTING.md) for more info.
|
|
|
|
## Release History
|
|
|
|
- **0.1.0** (*6-23-2014*) First Release
|
|
|
|
## License
|
|
Copyright (c) 2014 Timmy Willison. Licensed under the MIT license.
|