Running Webpack with GradleをWindowsで試した時にしょうもないエラーにはまった
Running Webpack with GradleをWindowsで試した時にしょうもないエラーにはまったときの原因と解決策です。
概要
Gradleでwebpackの以下のチュートリアルを実施していました。
https://guides.gradle.org/running-webpack-with-gradle/
Windows10のPCで手順どおりに実施したところ、以下の gradle webpack
ではまったエラーの共有と解決策を共有します。
エラー内容
Step 2: Use an Exec Task の手順を実施していた際です。
以下のように build.gradle でタスクを定義します。
build.gradle
task webpack(type: Exec) { commandLine "$projectDir/node_modules/.bin/webpack", "app/index.js", "$buildDir/js/bundle.js" }
gradle webpack
を実施したところ以下のエラーが発生しました。
D:\workspace\sample-gradle-webpack>gradle webpack > Task :webpack FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':webpack'. > A problem occurred starting process 'command 'D:\workspace\sample-gradle-webpack/node_modules/.bin/webpack'' * Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 2s 1 actionable task: 1 executed
これだけではわからないので --stacktrace オプションをつけて実行します。
エラー内容は以下です。本質的には CreateProcess error=193, %1 は有効な Win32 アプリケーションではありません。
の内容になります。
D:\workspace\sample-gradle-webpack>gradle webpack --stacktrace > Task :webpack FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':webpack'. > A problem occurred starting process 'command 'D:\workspace\sample-gradle-webpack/node_modules/.bin/webpack'' * Try: Run with --info or --debug option to get more log output. Run with --scan to get full insights. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':webpack'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:110) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77) at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59) at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101) at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44) at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91) at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301) at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293) at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175) at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91) at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31) at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46) at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277) at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) Caused by: org.gradle.process.internal.ExecException: A problem occurred starting process 'command 'D:\workspace\sample-gradle-webpack/node_modules/.bin/webpack'' at org.gradle.process.internal.DefaultExecHandle.execExceptionFor(DefaultExecHandle.java:231) at org.gradle.process.internal.DefaultExecHandle.setEndStateInfo(DefaultExecHandle.java:209) at org.gradle.process.internal.DefaultExecHandle.failed(DefaultExecHandle.java:355) at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:85) at org.gradle.internal.operations.CurrentBuildOperationPreservingRunnable.run(CurrentBuildOperationPreservingRunnable.java:42) ... 3 more Caused by: net.rubygrapefruit.platform.NativeException: Could not start 'D:\workspace\sample-gradle-webpack/node_modules/.bin/webpack' at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:27) at net.rubygrapefruit.platform.internal.WindowsProcessLauncher.start(WindowsProcessLauncher.java:22) at net.rubygrapefruit.platform.internal.WrapperProcessLauncher.start(WrapperProcessLauncher.java:36) at org.gradle.process.internal.ExecHandleRunner.run(ExecHandleRunner.java:67) ... 4 more Caused by: java.io.IOException: Cannot run program "D:\workspace\sample-gradle-webpack/node_modules/.bin/webpack" (in directory "D:\workspace\sample-gradle-webpack"): CreateProcess error=193, %1 は有効な Win32 アプリケーションではありません。 at net.rubygrapefruit.platform.internal.DefaultProcessLauncher.start(DefaultProcessLauncher.java:25) ... 7 more Caused by: java.io.IOException: CreateProcess error=193, %1 は有効な Win32 アプリケーションではありません。 ... 8 more * Get more help at https://help.gradle.org BUILD FAILED in 2s 1 actionable task: 1 executed
原因
これはつまり、build.gradle の Task として "$projectDir/node_modules/.bin/webpack" を実行するように指定しています。しかし WindowsOSでは webpack はファイルであって、実行可能ファイルではないためにこのエラーが起きています。
解決策
実行するファイルの指定を以下のようにう修正すれば良いです。
修正前
commandLine "$projectDir/node_modules/.bin/webpack", "app/index.js", "$buildDir/js/bundle.js"
修正後
commandLine "$projectDir/node_modules/.bin/webpack.cmd", "app/index.js", "$buildDir/js/bundle.js"
結果
実行することができました。
D:\workspace\sample-gradle-webpack>gradle webpack > Task :webpack Hash: 81d2caf621a7753a5bf0 Version: webpack 2.7.0 Time: 282ms Asset Size Chunks Chunk Names bundle.js 545 kB 0 [emitted] [big] main [0] ./~/lodash/lodash.js 540 kB {0} [built] [1] ./app/index.js 309 bytes {0} [built] [2] (webpack)/buildin/global.js 509 bytes {0} [built] [3] (webpack)/buildin/module.js 517 bytes {0} [built] BUILD SUCCESSFUL in 2s 1 actionable task: 1 executed