Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Revert "prune: Fix bug where prune --production would remove dev deps… by bcomnes · Pull Request #166 · npm/cli · GitHub
Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Revert "prune: Fix bug where prune --production would remove dev deps… by bcomnes · Pull Request #166 · npm/cli · GitHub
Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Revert "prune: Fix bug where prune --production would remove dev deps… by bcomnes · Pull Request #166 · npm/cli · GitHub
Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Revert "prune: Fix bug where prune --production would remove dev deps… by bcomnes · Pull Request #166 · npm/cli · GitHub
Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Revert "prune: Fix bug where prune --production would remove dev deps… by bcomnes · Pull Request #166 · npm/cli · GitHub
Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Revert "prune: Fix bug where prune --production would remove dev deps… by bcomnes · Pull Request #166 · npm/cli · GitHub
Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Revert "prune: Fix bug where prune --production would remove dev deps… by bcomnes · Pull Request #166 · npm/cli · GitHub
Skip to content

Revert "prune: Fix bug where prune --production would remove dev deps… - #166

Closed
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change
Closed

Revert "prune: Fix bug where prune --production would remove dev deps…#166
bcomnes wants to merge 1 commit into
npm:latestfrom
bcomnes:revert-prune-change

Conversation

@bcomnes

@bcomnesbcomnes commented Feb 20, 2019

Copy link
Copy Markdown

… from the lock file"

This change broke the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally (not what you would typically want ever). The only way around this was to prune --prod during prepack to generate a shrinkwrap without devDeps and publish with that (prior to this change going out). See people here discussing that workaround: (herehere)

After this change, prune --prod no longer modifies the shrinkwrap file to remove devDeps. Reverting this commit restores the old behavior.

The situation is already looking like a hack but here are two alternative ideas:

  • Perhaps the commit in question IS correct, but a shrinkwrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json). This is not the current behavior now though.
  • Perhaps running npm shrinkwrap --prod should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). The goal isn't to prune node_modules, its to get my shrinkwrap file right.

I would propose we revert this change in the meantime so that this avenue isn’t broken, until the primary issue is resolved.

This reverts commit cec5be5.

workaround for those interested

  • During prepack: npm prune --prod && rm npm-shrinkwrap.json && npm shrinkwrap Generates the shrinkwrap without devDeps
  • During postpack: git checkout -- npm-shrinkwrap.json && npm i restores devDeps and reinstalls what was removed during the prune.

… from the lock file"
This breaks the ability to (easily) create a shrinkwrap file that does not include devDeps. The current behavior of a package published with a shrinkwrap file that includes devDeps is that the devDeps get installed when the package is installed globally. The only way around this was to `prune --prod` during prepack to generate a shrinkwrap without devDeps and publish with that. After this change, `prune --prod` no longer modifies the shrinkwrap file to remove devDeps. The situation is already looking like a hack but:
- Perhaps a shrink wrapped package should not install devDeps when installed as a dependency or global package (this seems the most correct and implied behavior described in https://docs.npmjs.com/files/shrinkwrap.json)
- Perhaps running `npm shrinkwrap --prod` should remove the devDeps from the lock file (without pruning node_modules so its faster and can be restored by shrink-wrapping without the flag). Easier than above, but still possibly in hacksvill. I would propose we revert this change so that this avenue isn’t broken, until the primary issue is resolved.
This reverts commit cec5be5.

@zkatzkat left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey! Thanks for taking the time to put this together. After some discussion, it was decided that this isn't really the fix we would be looking for -- I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context, but I'd rather that specific bug gets fixed. Having devDeps in shrinkwrap is by design, since the shrinkwrap file is intended to be a complete description of the tree and we don't currently have plans to allow partial shrinkwraps (the way that used to be possible).

As such, we're gonna pass on this PR, but I hope you continue contributing in the future! (such as contributing a PR to fix that bug). The care is appreciated! ❤️

@zkatzkat closed this Mar 18, 2019
@bcomnes

Copy link
Copy Markdown
Author

I agree that it's definitely a bug for devDeps to be installed when there's a shrinkwrap in a global context

Do you have any advice on where to start a fix for that?

@bcomnes
bcomnes deleted the revert-prune-change branch March 18, 2019 22:41
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 4, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 11, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Jul 21, 2026
github-actionsBot added a commit to Kevinlee7250/cli that referenced this pull request Aug 14, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@bcomnes@zkat