0
1

More than 3 years have passed since last update.

create-react-app + electrion-forge @Windows

Posted at

はじめに

Electron Apps Made Easy with Create React App and Electron Forgeを参考に初めてみた。

が、electron-forge makeが失敗する。
どうやら、Windowsのパス制限の模様。ざっくりというと、以下のような感じにする!

  1. プロジェクトは浅いディレクトリで開発する。
  2. package.jsonにasar:trueを指定する。

よくわからない言葉で怒られる.....

An unhandled error has occurred inside Forge:[39m
[31mAn error occured while making for target: squirrel[39m
[31mFailed with exit code: 1[39m
[31mOutput:[39m
[31m'electron_react.nuspec' ?????????????????[39m
[31m??????????????????????????????????? 260 ????????????????? 248 ????????????[39m

[31mError: Failed with exit code: 1[39m
[31mOutput:[39m
[31m'electron_react.nuspec' ?????????????????[39m
[31m??????????????????????????????????? 260 ????????????????? 248 ????????????[39m

node_modules\electron-winstaller\src\spawn-promise.tsあたりで怒られているが、実際は、node_modules\electron-winstaller\lib\spawn-promise.jsで怒られている。
#ソースマップでそうなるのはわかるが......

とりあえず、iconv-liteをかましてstdoutをShift_JISを変換かけてやる。

spawn-promise.js
        var bufHandler = function (b) {
            // var chunk = b.toString();
            // stdout += chunk;
            stdout += iconv.decode(Buffer.from(b), 'Shift_JIS')
        };

どうやらパスが長いらしい。
Windows 10になっても、あいかわらず、こんなことで怒られるとは......
ということで、プロジェクトのディレクトリを上の方に移動すると、とりあえずは解決する。

再度、怒られる.....

今度は、こんな感じ。

An unhandled error has occurred inside Forge:
An error occured while making for target: squirrel
Failed with exit code: 4294967295
Output:
System.AggregateException: 1 つ以上のエラーが発生しました。 ---> System.IO.PathTooLongException: 指定されたパス、ファイル名、またはその両方が長すぎます。完 
全限定型名は 260 文字未満で指定し、ディレクトリ名は 248 未満で指定してください。
   場所 System.IO.Path.LegacyNormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   場所 System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   場所 System.IO.Path.InternalGetDirectoryName(String path)
   場所 Squirrel.ReleasePackage.<>c__DisplayClass14_0.<extractZipWithEscaping>b__0()
   場所 System.Threading.Tasks.Task.InnerInvoke()
   場所 System.Threading.Tasks.Task.Execute()

どうしようかと調べてみると、以下のように、asarを使ってあげればいいらしい。

package.json
 "config": {
    "forge": {
      "packagerConfig": {
        "asar": true
      },

おしまい

ぜんぜん、本題に入れないが、とりあえず、makeまでできるようになった。
これから、なんか作っていこう!

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1