@@ -72,10 +72,16 @@ inputFile = Opts.strArgument $
7272 Opts.metavar "FILE"
7373 <> Opts.help "Optional .purs files to load on start"
7474
75−nodeFlagsFlag :: Opts.Parser [String]
76−nodeFlagsFlag = Opts.option parser $
75+nodePathOption :: Opts.Parser (Maybe FilePath)
76+nodePathOption = Opts.optional . Opts.strOption $
77+ Opts.metavar "FILE"
78+ <> Opts.long "node-path"
79+ <> Opts.help "Path to the Node executable"
80+
81+nodeFlagsOption :: Opts.Parser [String]
82+nodeFlagsOption = Opts.option parser $
7783 Opts.long "node-opts"
78− <> Opts.metavar "NODE_OPTS"
84+ <> Opts.metavar "OPTS"
7985 <> Opts.value []
8086 <> Opts.help "Flags to pass to node, separated by spaces"
8187 where
@@ -90,7 +96,7 @@ port = Opts.option Opts.auto $
9096backend :: Opts.Parser Backend
9197backend =
9298 (browserBackend <$> port)
93− <|> (nodeBackend <$> nodeFlagsFlag)
99+ <|> (nodeBackend <$> nodePathOption <*> nodeFlagsOption)
94100
95101psciOptions :: Opts.Parser PSCiOptions
96102psciOptions = PSCiOptions <$> many inputFile
@@ -293,8 +299,8 @@ browserBackend serverPort = Backend setup evaluate reload shutdown
293299 result <- takeMVar resultVar
294300 putStrLn result
295301
296−nodeBackend :: [String] -> Backend
297−nodeBackend nodeArgs = Backend setup eval reload shutdown
302+nodeBackend :: Maybe FilePath -> [String] -> Backend
303+nodeBackend nodePath nodeArgs = Backend setup eval reload shutdown
298304 where
299305 setup :: IO ()
300306 setup = return ()
@@ -302,12 +308,12 @@ nodeBackend nodeArgs = Backend setup eval reload shutdown
302308 eval :: () -> String -> IO ()
303309 eval _ _ = do
304310 writeFile indexFile "require('$PSCI')['$main']();"
305− process <- findNodeProcess
311+ process <- maybe findNodeProcess (pure . pure) nodePath
306312 result <- traverse (\node -> readProcessWithExitCode node (nodeArgs ++ [indexFile]) "") process
307313 case result of
308− Just (ExitSuccess, out, _) -> putStrLn out
309− Just (ExitFailure _, _, err) -> putStrLn err
310− Nothing -> putStrLn "Couldn't find node.js"
314+ Just (ExitSuccess, out, _) -> putStrLn out
315+ Just (ExitFailure _, _, err) -> putStrLn err
316+ Nothing -> putStrLn "Couldn't find node.js"
311317
312318 reload :: () -> IO ()
313319 reload _ = return ()