@@ -110,16 +110,16 @@ let
110
110
text = ''
111
111
var fs = require('fs');
112
112
var path = require('path');
113
-
113
+
114
114
function resolveDependencyVersion(location, name) {
115
115
if(location == process.env['NIX_STORE']) {
116
116
return null;
117
117
} else {
118
118
var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
119
-
119
+
120
120
if(fs.existsSync(dependencyPackageJSON)) {
121
121
var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
122
-
122
+
123
123
if(dependencyPackageObj.name == name) {
124
124
return dependencyPackageObj.version;
125
125
}
@@ -128,12 +128,12 @@ let
128
128
}
129
129
}
130
130
}
131
-
131
+
132
132
function replaceDependencies(dependencies) {
133
133
if(typeof dependencies == "object" && dependencies !== null) {
134
134
for(var dependency in dependencies) {
135
135
var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
136
-
136
+
137
137
if(resolvedVersion === null) {
138
138
process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
139
139
} else {
@@ -142,25 +142,25 @@ let
142
142
}
143
143
}
144
144
}
145
-
145
+
146
146
/* Read the package.json configuration */
147
147
var packageObj = JSON.parse(fs.readFileSync('./package.json'));
148
-
148
+
149
149
/* Pinpoint all dependencies */
150
150
replaceDependencies(packageObj.dependencies);
151
151
if(process.argv[2] == "development") {
152
152
replaceDependencies(packageObj.devDependencies);
153
153
}
154
154
replaceDependencies(packageObj.optionalDependencies);
155
-
155
+
156
156
/* Write the fixed package.json file */
157
157
fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
158
158
'' ;
159
159
} ;
160
160
in
161
161
''
162
162
node ${ pinpointDependenciesFromPackageJSON } ${ if production then "production" else "development" }
163
-
163
+
164
164
${ stdenv . lib . optionalString ( dependencies != [ ] )
165
165
''
166
166
if [ -d node_modules ]
@@ -171,11 +171,11 @@ let
171
171
fi
172
172
'' }
173
173
'' ;
174
-
174
+
175
175
# Recursively traverses all dependencies of a package and pinpoints all
176
176
# dependencies in the package.json file to the versions that are actually
177
177
# being used.
178
-
178
+
179
179
pinpointDependenciesOfPackage = { packageName , dependencies ? [ ] , production ? true , ... } @args :
180
180
''
181
181
if [ -d "${ packageName } " ]
210
210
211
211
compositionScript = composePackage args ;
212
212
pinpointDependenciesScript = pinpointDependenciesOfPackage args ;
213
-
213
+
214
214
passAsFile = [ "compositionScript" "pinpointDependenciesScript" ] ;
215
215
216
216
installPhase = args . installPhase or ''
220
220
221
221
# Compose the package and all its dependencies
222
222
source $compositionScriptPath
223
-
223
+
224
224
# Pinpoint the versions of all dependencies to the ones that are actually being used
225
225
echo "pinpointing versions of dependencies..."
226
226
source $pinpointDependenciesScriptPath
@@ -287,31 +287,31 @@ let
287
287
288
288
includeScript = includeDependencies { inherit dependencies ; } ;
289
289
pinpointDependenciesScript = pinpointDependenciesOfPackage args ;
290
-
290
+
291
291
passAsFile = [ "includeScript" "pinpointDependenciesScript" ] ;
292
292
293
293
buildCommand = ''
294
- mkdir -p $out/lib
295
- cd $out/lib
294
+ mkdir -p $out/${ packageName }
295
+ cd $out/${ packageName }
296
+
296
297
source $includeScriptPath
297
-
298
+
299
+ # Create fake package.json to make the npm commands work properly
300
+ cp ${ src } /package.json .
301
+ chmod 644 package.json
302
+
298
303
# Pinpoint the versions of all dependencies to the ones that are actually being used
299
304
echo "pinpointing versions of dependencies..."
305
+ cd ..
300
306
source $pinpointDependenciesScriptPath
301
-
302
- # Create fake package.json to make the npm commands work properly
303
- cat > package.json <<EOF
304
- {
305
- "name": "${ packageName } ",
306
- "version": "${ version } "
307
- }
308
- EOF
307
+ cd ${ packageName }
309
308
310
309
# Patch the shebangs of the bundled modules to prevent them from
311
310
# calling executables outside the Nix store as much as possible
312
311
patchShebangs .
313
312
314
313
export HOME=$PWD
314
+
315
315
npm --registry http://www.example.com --nodedir=${ nodeSources } ${ npmFlags } ${ stdenv . lib . optionalString production "--production" } rebuild
316
316
317
317
${ stdenv . lib . optionalString ( ! dontNpmInstall ) ''
321
321
npm --registry http://www.example.com --nodedir=${ nodeSources } ${ npmFlags } ${ stdenv . lib . optionalString production "--production" } install
322
322
'' }
323
323
324
+ cd ..
325
+ mv ${ packageName } lib
324
326
ln -s $out/lib/node_modules/.bin $out/bin
325
327
'' ;
326
328
} ;
0 commit comments