npm-packlist
Get a list of the files to add from a folder into an npm package
These can be handed to tar like so to make an npm package tarball:
const packlist = require('npm-packlist')
const tar = require('tar')
const packageDir = '/path/to/package'
const packageTarball = '/path/to/package.tgz'
packlist({ path: packageDir })
.then(files => tar.create({
prefix: 'package/',
cwd: packageDir,
file: packageTarball,
gzip: true
}, files))
.then(_ => {
// tarball has been created, continue with your day
})
This uses the following rules:
- If a
package.json
file is found, and it has afiles
list, then ignore everything that isn't infiles
. Always include the readme, license, notice, changes, changelog, and history files, if they exist, and the package.json file itself. - If there's no
package.json
file (or it has nofiles
list), and there is a.npmignore
file, then ignore all the files in the.npmignore
file. - If there's no
package.json
with afiles
list, and there's no.npmignore
file, but there is a.gitignore
file, then ignore all the files in the.gitignore
file. - Everything in the root
node_modules
is ignored, unless it's a bundled dependency. If it IS a bundled dependency, and it's a symbolic link, then the target of the link is included, not the symlink itself. -
Unless they're explicitly included (by being in a
files
list, or a!negated
rule in a relevant.npmignore
or.gitignore
), always ignore certain common cruft files:- .npmignore and .gitignore files (their effect is in the package already, there's no need to include them in the package)
- editor junk like
.*.swp
,._*
and.*.orig
files -
.npmrc
files (these may contain private configs) - The
node_modules/.bin
folder - Waf and gyp cruft like
/build/config.gypi
and.lock-wscript
- Darwin's
.DS_Store
files because wtf are those even -
npm-debug.log
files at the root of a project
You can explicitly re-include any of these with a
files
list inpackage.json
or a negated ignore file rule.
API
Same API as ignore-walk, just hard-coded file list and rule sets.
The Walker
and WalkerSync
classes take a bundled
argument, which
is a list of package names to include from node_modules. When calling
the top-level packlist()
and packlist.sync()
functions, this
module calls into npm-bundled
directly.