@@ -397,6 +397,8 @@ impl IsolatedLinker {
397397 . join ( pkg. name ( ) )
398398 } ;
399399
400+ let is_optional = graph. is_optional ( idx) ;
401+
400402 let build_mani =
401403 BuildManifest :: from_path ( pkg_dir. join ( "package.json" ) ) . map_err ( |e| {
402404 NodeMaintainerError :: BuildManifestReadError ( pkg_dir. join ( "package.json" ) , e)
@@ -413,13 +415,21 @@ impl IsolatedLinker {
413415 on_script_start ( & graph[ idx] . package , & event) ;
414416 }
415417 std:: mem:: drop ( _span_enter) ;
416- let mut script = async_std:: task:: spawn_blocking ( move || {
418+ let mut script = match async_std:: task:: spawn_blocking ( move || {
417419 OroScript :: new ( package_dir, event) ?
418- // For isolated installs, we don't add ancestor node_modules/.bin
419420 . workspace_path ( package_dir_clone)
420421 . spawn ( )
421422 } )
422- . await ?;
423+ . await
424+ {
425+ Ok ( script) => script,
426+ Err ( e) if is_optional => {
427+ let e: NodeMaintainerError = e. into ( ) ;
428+ tracing:: debug!( "Error in optional dependency script: {}" , e) ;
429+ return Ok ( ( ) ) ;
430+ }
431+ Err ( e) => return Err ( e. into ( ) ) ,
432+ } ;
423433 let stdout = script. stdout . take ( ) ;
424434 let stderr = script. stderr . take ( ) ;
425435 let stdout_name = name. clone ( ) ;
@@ -428,7 +438,7 @@ impl IsolatedLinker {
428438 let stderr_on_line = self . 0 . on_script_line . clone ( ) ;
429439 let stdout_span = span;
430440 let stderr_span = stdout_span. clone ( ) ;
431- futures:: try_join!(
441+ let join = futures:: try_join!(
432442 async_std:: task:: spawn_blocking( move || {
433443 let _enter = stdout_span. enter( ) ;
434444 if let Some ( stdout) = stdout {
@@ -459,7 +469,15 @@ impl IsolatedLinker {
459469 script. wait( ) ?;
460470 Ok :: <_, NodeMaintainerError >( ( ) )
461471 } ) ,
462- ) ?;
472+ ) ;
473+ match join {
474+ Ok ( _) => { }
475+ Err ( e) if is_optional => {
476+ tracing:: debug!( "Error in optional dependency script: {}" , e) ;
477+ return Ok ( ( ) ) ;
478+ }
479+ Err ( e) => return Err ( e) ,
480+ }
463481 }
464482
465483 Ok :: < _ , NodeMaintainerError > ( ( ) )
0 commit comments