Skip to content

Commit 4822f14

Browse files
Fix for #920 and potentially dodgy node dependencies lockfile
1 parent b1c1180 commit 4822f14

4 files changed

Lines changed: 29 additions & 7 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,4 @@ vagrant/Homestead/
7474

7575
# Igore npm lockfile
7676
build/package-lock.json
77+
build/package.lock

app/sprinkles/core/src/Bakery/BuildAssets.php

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,26 +89,39 @@ protected function npmInstall($force)
8989
$wd = getcwd();
9090
chdir($this->buildPath);
9191

92+
// Delete troublesome package-lock.json
93+
if (file_exists('package-lock.json')) unlink('package-lock.json');
94+
9295
// Skip if lockfile indicates previous run
93-
if (!$force && file_exists('package-lock.json') && filemtime('package.json') < filemtime('package-lock.json') - 1) {
96+
if (!$force && file_exists('package.lock') && filemtime('package.json') < filemtime('package.lock') - 1) {
9497
$this->io->writeln('> <comment>Skipping as package-lock.json age indicates dependencies are already installed</comment>');
9598
chdir($wd);
9699

97100
return;
98101
}
99102

103+
// Ensure extraneous dependencies are cleared out
100104
$exitCode = 0;
101-
passthru('npm install', $exitCode);
105+
passthru('npm prune');
102106

103-
// Ensure lockfile last-modified date is updated
104-
touch('package-lock.json');
107+
if ($exitCode !== 0) {
108+
$this->io->error('npm dependency installation has failed');
109+
exit(1);
110+
}
105111

106-
chdir($wd);
112+
// Install the new dependencies
113+
$exitCode = 0;
114+
passthru('npm install', $exitCode);
107115

108116
if ($exitCode !== 0) {
109117
$this->io->error('npm dependency installation has failed');
110118
exit(1);
111119
}
120+
121+
// Update lockfile date (for skip logic)
122+
touch('package.lock');
123+
124+
chdir($wd);
112125
}
113126

114127
/**

build/.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package-lock=false

build/gulpfile.esm.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,9 @@ export async function assetsInstall() {
7474
// Install npm dependencies
7575
Logger("Installing vendor assets with NPM...")
7676

77-
// Remove package.json (package-lock.json can be left untouched as dates will invalidate it)
77+
// Remove package.json and package-lock.json (if it happens to exist)
7878
deleteSync(vendorAssetsDir + "package.json", { force: true });
79+
deleteSync(vendorAssetsDir + "package-lock.json", { force: true });
7980

8081
// Generate package.json
8182
const npmTemplate = {
@@ -86,8 +87,14 @@ export async function assetsInstall() {
8687
const pkg = mergeNpmDeps(npmTemplate, npmPaths, vendorAssetsDir, doILog);
8788
Logger("Dependency collation complete.");
8889

90+
// Remove any existing unneeded dependencies
91+
Logger("Running npm prune (using npm from PATH)");
92+
execSync("npm prune", {
93+
cwd: vendorAssetsDir,
94+
stdio: doILog ? "inherit" : ""
95+
});
96+
8997
// Perform installation
90-
// NPM will automatically remove extraneous packages (barring algorithm failure) during install
9198
Logger("Running npm install (using npm from PATH)");
9299
execSync("npm install", {
93100
cwd: vendorAssetsDir,

0 commit comments

Comments
 (0)