anchor.diff:    --version           Print version
     add                 Add one or several Fable npm packages
     start               Start Fable server
  -  --port              Port number (default 61225) or "free" to choose a free port. 
  +  --port              Port number (default 61225) or "free" to choose a free port.
     --timeout           Stop the server if timeout (ms) is reached
     npm-run             Start a server, run an npm script and shut it down
       <script>            Name of the npm script, e.g.: `dotnet fable npm-run start`
  -    --port              Port number (default 61225) or "free" to choose a free port. 
  +    --port              Port number (default 61225) or "free" to choose a free port.
       --args              Args for the npm script, e.g.: `dotnet fable npm-run build --args "-p --output-filename bundle.js"`
     webpack             Start a server and invoke webpack (must be installed in current or a parent dir)
  -    --port              Port number (default 61225) or "free" to choose a free port. 
  +    --port              Port number (default 61225) or "free" to choose a free port.
       --args              Args for Webpack, e.g.: `dotnet fable webpack --args -p`
     shell-run           Start a server, run an abritrary command and shut it down
       <cmd>            Name of the command to run, e.g.: `dotnet fable shell-run make`
  -    --port              Port number (default 61225) or "free" to choose a free port. 
  +    --port              Port number (default 61225) or "free" to choose a free port.
       --args              Args for the command, e.g.: `dotnet fable shell-run make --args "build"`
     webpack-dev-server  Same as `webpack` command but invokes webpack-dev-server
   """
  
positive.code:             let pkgDir = Path.Combine(nodeModulesDir, pkg)
              Directory.GetFiles(pkgDir, "*.fsproj") |> Array.tryHead |> function
              | Some projRef ->
                  runProcess workingDir "dotnet" ("add reference " + projRef)
              | None ->
                  printfn "Cannot find .fsproj in %s" pkgDir
          runProcess workingDir "dotnet" "restore"
  
negative.code:     p.StartInfo.FileName <- fileName
      p.StartInfo.Arguments <- args
      p.StartInfo.WorkingDirectory <- workingDir
      p.StartInfo.RedirectStandardOutput <- opts.RedirectOuput
      opts.EnvVars |> Map.iter (fun k v ->
          p.StartInfo.Environment.[k] <- v)
      p.Start() |> ignore
      p
  
  let runProcess workingDir fileName args =
      let p =
          ProcessOptions()
          |> startProcess workingDir fileName args
      p.WaitForExit()
      match p.ExitCode with
      | 0 -> ()
      | c -> failwithf "Process %s %s finished with code %i" fileName args c
  
  let runProcessAndReadOutput workingDir fileName args =
      let p =
          ProcessOptions(redirectOutput=true)
          |> startProcess workingDir fileName args
      let output = p.StandardOutput.ReadToEnd()
      printfn "%s" output
      p.WaitForExit()
      output
  
  let rec findPackageJsonDir dir =
      if File.Exists(Path.Combine(dir, "package.json"))
  