diff --git a/workspaces/libnpmpack/lib/index.js b/workspaces/libnpmpack/lib/index.js index baccadc3354df..70d67d360f0d9 100644 --- a/workspaces/libnpmpack/lib/index.js +++ b/workspaces/libnpmpack/lib/index.js @@ -21,7 +21,7 @@ async function pack (spec = 'file:.', opts = {}) { const stdio = opts.foregroundScripts ? 'inherit' : 'pipe' - if (spec.type === 'directory') { + if (spec.type === 'directory' && !opts.ignoreScripts) { // prepack await runScript({ ...opts, @@ -48,7 +48,7 @@ async function pack (spec = 'file:.', opts = {}) { await writeFile(destination, tarball) } - if (spec.type === 'directory') { + if (spec.type === 'directory' && !opts.ignoreScripts) { // postpack await runScript({ ...opts, diff --git a/workspaces/libnpmpack/test/fixtures/tspawk.js b/workspaces/libnpmpack/test/fixtures/tspawk.js index 554a9d402c32f..b2559fc3686e7 100644 --- a/workspaces/libnpmpack/test/fixtures/tspawk.js +++ b/workspaces/libnpmpack/test/fixtures/tspawk.js @@ -5,12 +5,9 @@ const spawk = require('spawk') module.exports = tspawk function tspawk (t) { - spawk.preventUnmatched() t.teardown(function () { - spawk.unload() - }) - t.afterEach(function () { spawk.done() + spawk.unload() }) return spawk } diff --git a/workspaces/libnpmpack/test/index.js b/workspaces/libnpmpack/test/index.js index fb50e197bceaf..aa4f955fac0b0 100644 --- a/workspaces/libnpmpack/test/index.js +++ b/workspaces/libnpmpack/test/index.js @@ -3,6 +3,7 @@ const t = require('tap') const tspawk = require('./fixtures/tspawk.js') +const spawk = tspawk(t) const fs = require('fs') const path = require('path') @@ -138,8 +139,6 @@ t.test('packs from registry spec', async t => { }) t.test('runs scripts in foreground when foregroundScripts === true', async t => { - const spawk = tspawk(t) - const testDir = t.testdir({ 'package.json': JSON.stringify({ name: 'my-cool-pkg', @@ -172,3 +171,39 @@ t.test('runs scripts in foreground when foregroundScripts === true', async t => process.chdir(cwd) }) }) + +t.test('doesn\'t run scripts when ignoreScripts === true', async t => { + const testDir = t.testdir({ + 'package.json': JSON.stringify({ + name: 'my-cool-pkg', + version: '1.0.0', + scripts: { + prepack: 'touch prepack', + }, + }, null, 2), + }) + + const cwd = process.cwd() + process.chdir(testDir) + + const [scriptShell, scriptArgs] = makeSpawnArgs({ + event: 'prepack', + path: testDir, + cmd: 'touch prepack', + }) + + const prepack = spawk.spawn(scriptShell, scriptArgs) + + await pack('file:.', { + packDestination: testDir, + foregroundScripts: true, + ignoreScripts: true, + }) + + t.ok(!prepack.called) + + t.teardown(async () => { + process.chdir(cwd) + spawk.clean() + }) +})