diff --git a/src/package.ts b/src/package.ts index 870ff6c..c0c582c 100644 --- a/src/package.ts +++ b/src/package.ts @@ -96,11 +96,17 @@ const defaultIgnore = [ '**/.DS_Store' ]; -function collectFiles(cwd: string): Promise { +function devDependenciesIgnore(manifest: Manifest): string[] { + const devDependencies = Object.keys(manifest.devDependencies || {}); + return devDependencies.map(d => `node_modules/${ d }/**`); +} + +function collectFiles(cwd: string, manifest: Manifest): Promise { return nfcall(glob, '**', { cwd, nodir: true, dot: true }).then(files => { return nfcall(fs.readFile, path.join(cwd, '.vscodeignore'), 'utf8') .catch(err => err.code !== 'ENOENT' ? reject(err) : resolve('')) .then(rawIgnore => rawIgnore.split(/[\n\r]/).map(s => s.trim()).filter(s => !!s)) + .then(ignore => devDependenciesIgnore(manifest).concat(ignore)) .then(ignore => defaultIgnore.concat(ignore)) .then(ignore => ignore.filter(i => !/^\s*#/.test(i))) .then(ignore => _.partition(ignore, i => !/^\s*!/.test(i))) @@ -109,7 +115,7 @@ function collectFiles(cwd: string): Promise { } export function collect(cwd: string, manifest: Manifest): Promise { - return all([toVsixManifest(manifest), collectFiles(cwd)]) + return all([toVsixManifest(manifest), collectFiles(cwd, manifest)]) .spread((vsixManifest: string, files: string[]) => [ { path: 'extension.vsixmanifest', contents: new Buffer(vsixManifest, 'utf8') }, { path: '[Content_Types].xml', localPath: path.join(resourcesPath, '[Content_Types].xml') }, diff --git a/test/fixtures/devDependencies/package.json b/test/fixtures/devDependencies/package.json new file mode 100644 index 0000000..48bf921 --- /dev/null +++ b/test/fixtures/devDependencies/package.json @@ -0,0 +1,12 @@ +{ + "name": "uuid", + "publisher": "joaomoreno", + "version": "1.0.0", + "engines": { "vscode": "*" }, + "dependencies": { + "real": "*" + }, + "devDependencies": { + "fake": "*" + } +} \ No newline at end of file diff --git a/test/package.test.js b/test/package.test.js index 0fe49e7..7bac854 100644 --- a/test/package.test.js +++ b/test/package.test.js @@ -38,4 +38,18 @@ describe('collect', () => { }) .catch(cb); }); + + it('should ignore devDependencies', cb => { + const cwd = fixture('devDependencies'); + + readManifest(cwd) + .then(manifest => collect(cwd, manifest)) + .then(files => { + assert.equal(files.length, 4); + assert.ok(files.some(f => /real\/dependency\.js/.test(f.path))); + assert.ok(!files.some(f => /fake\/dependency\.js/.test(f.path))); + cb(); + }) + .catch(cb); + }); }); \ No newline at end of file