Как мне запустить NPM из FAKE?
Важный:
Поскольку я подумал, что это то, что многие люди хотели бы сделать, я добавил в FAKE помощника, чтобы сделать это: http://fsharp.github.io/FAKE/apidocs/fake-npmhelper.html
Вопрос начинается здесь:
Я пытаюсь запустить NPM из Fake, но по какой-то причине это не сработает.
Моя фальшивая цель выглядит так:
Target "Web" (fun _ ->
let result =
ExecProcess (fun info ->
info.FileName <- "npm.cmd"
info.Arguments <- "install ./src/FAKESimple.Web/"
info.WorkingDirectory <- "."
) (System.TimeSpan.FromMinutes 1.0)
if result <> 0 then failwith "Operation failed or timed out"
trace "Hello World from FAKE"
)
Я получаю сообщение об ошибке:
module.js:338
throw err;
^
Error: Cannot find module 'C:\dev\git\FAKESimpleDemo\node_modules\npm\bin\npm-
cli.js'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:278:25)
at Function.Module.runMain (module.js:501:10)
at startup (node.js:129:16)
at node.js:814:3
Running build failed.
Error:
System.Exception: Operation failed or timed out
at FSI_0001.clo@62-10.Invoke(Unit _arg2) in C:\Dev\git\FAKESimpleDemo\build
.fsx:line 69
at Fake.TargetHelper.runSingleTarget(TargetTemplate`1 target) in C:\code\fake\src\app\FakeLib\TargetHelper.fs:line 483
По умолчанию npm.cmd
выглядеть так:
:: Created by npm, please don't edit manually.
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\.\node_modules\npm\bin\npm-cli.js" %*
) ELSE (
node "%~dp0\.\node_modules\npm\bin\npm-cli.js" %*
)
Так что кажется, что %~dp0
получить разрешение на то, что является рабочим каталогом ExecProcess
а не путь к папке npm.cmd
который предназначен.
Есть идеи, как решить эту проблему или как запустить npm из FAKE?
Обновить
У меня есть пример проекта, который иллюстрирует это здесь: https://github.com/mastoj/FAKESimpleDemo/commit/1066c6d78cd0c8d8ab261f647118b30d15487c2f
Требуется, чтобы узел был установлен.
Обновление 2:
Я думаю, что я сейчас, что происходит, но не как это решить. Если вы бежите npm
из обычной командной строки все работает как надо, но если запустить "npm"
(обратите внимание на кавычки) вы получаете ту же ошибку. По какой-то причине %~dp0
решаться по-разному в зависимости от того, как что-то вызывается, что кажется странным.
0 ответов
Я использую FAKE и PAKET, чтобы собрать приложение Angular 6 и упаковать его в пакет NuGet. Цели, которые создает мое приложение, следующие:
Target.create "BuildAngular"( fun _ ->
Trace.setBuildNumber (CreateInformationalVersion versionInfo)
Npm.run "buildproductive" (fun o -> { o with WorkingDirectory = "./src"})
Directory.Move("./src/dist/", dirAngularOutput)
ZipFile.CreateFromDirectory (dirAngularOutput, dirBuildOutput @@ "gui.zip")
)
Параметр "buildproductive" является целью, которую я определил в package.json в массиве scripts:
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"buildproductive": "node_modules/.bin/ng build --prod",
"test": "ng test",
"test:ci": "node_modules/.bin/ng test --karma-config=src/karma.ci.conf.js",
"test:headless": "node_modules/.bin/ng test --karma-config=src/karma.headless.conf.js",
"lint": "ng lint",
"e2e": "ng e2e"
}