回答編集履歴

2

記述ミスによるレイアウト崩れを修正

2021/04/24 05:09

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -134,7 +134,9 @@
134
134
 
135
135
  そのデフォルトターゲットの式がこちら
136
136
 
137
- `target = `${target.platform}-${target.arch}-${target.version}``
137
+ `${target.platform}-${target.arch}-${target.version}`
138
+
139
+ JSではバッククォートでテンプレートリテラルが使えますが、その中身です。
138
140
 
139
141
 
140
142
 

1

おまけ追加

2021/04/24 05:09

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -59,3 +59,123 @@
59
59
  4系はBetaですが現行の3系最新バージョンは`v3.3.7`みたいです。
60
60
 
61
61
  上記インストールしているものを全て削除して、`v3.3.7`のバージョンでやり直して見てください。
62
+
63
+
64
+
65
+ ---
66
+
67
+
68
+
69
+ 【追記】 Nexeのソースコードを読んできました
70
+
71
+
72
+
73
+ 何で存在しないバージョンのバイナリを探しにいくのかを調査してきました。
74
+
75
+ それはターゲットの指定が雑な作りになっている事が原因のようです。
76
+
77
+
78
+
79
+ ソースコードの流れ
80
+
81
+
82
+
83
+ - [package.json](https://github.com/nexe/nexe/blob/v3.3.7/package.json#L28): `"main": "index.js",`
84
+
85
+ - [index.js](https://github.com/nexe/nexe/blob/v3.3.7/index.js#L12): `nexe.compile(argv).catch((error) => {`
86
+
87
+ - [src/nexe.ts](https://github.com/nexe/nexe/blob/master/src/nexe.ts#L23): `options = normalizeOptions(compilerOptions)`
88
+
89
+ - [src/options.ts](https://github.com/nexe/nexe/blob/master/src/options.ts#L247): `options.targets.push(getTarget())`
90
+
91
+ - [src/targets.ts](https://github.com/nexe/nexe/blob/master/src/target.ts#L70)
92
+
93
+
94
+
95
+ ```ts
96
+
97
+ export function getTarget(target: string | Partial<NexeTarget> = ''): NexeTarget {
98
+
99
+ const currentArch = process.arch
100
+
101
+ let arch = currentArch in prettyArch ? prettyArch[process.arch] : (process.arch as NodeArch),
102
+
103
+ platform = prettyPlatform[process.platform],
104
+
105
+ version = process.version.slice(1)
106
+
107
+
108
+
109
+ if (typeof target !== 'string') {
110
+
111
+ target = `${target.platform}-${target.arch}-${target.version}`
112
+
113
+ }
114
+
115
+ ```
116
+
117
+
118
+
119
+ これがデフォルトのターゲットです。
120
+
121
+
122
+
123
+ ざっくりと解説すると、
124
+
125
+ [READMEのOptions](https://github.com/nexe/nexe#nexeoptions)の項目に[ターゲット指定](https://github.com/nexe/nexe#target-string--object)があります。
126
+
127
+ 何のOS・CPUに対して実行ファイルを作るかなんて対象が分からないと何も出来ませんから、
128
+
129
+ ここが無記入の場合、現在起動しているマシンの情報を使って作る仕様になっているようですね。
130
+
131
+ (まぁそれが自然だわな)
132
+
133
+
134
+
135
+ そのデフォルトターゲットの式がこちら
136
+
137
+ `target = `${target.platform}-${target.arch}-${target.version}``
138
+
139
+
140
+
141
+ - [process.platform](https://nodejs.org/api/process.html#process_process_platform)
142
+
143
+ - [process.arch](https://nodejs.org/api/process.html#process_process_arch)
144
+
145
+ - [process.version](https://nodejs.org/api/process.html#process_process_version)
146
+
147
+
148
+
149
+ これにprettyXxxの関数をかぶせて補正しているようですが、
150
+
151
+ 現在のOS・CPU・Node.jsのバージョンを利用して実行ファイルをこしらえてくるようです。
152
+
153
+
154
+
155
+ ところがNode.jsはご存知のようにバージョン番号がころっころ変わるので、
156
+
157
+ 星の数程バイナリを用意してある必要がるのですが、
158
+
159
+ 結果はご覧の有様だよ!という感じです。
160
+
161
+
162
+
163
+ まぁ、Node.jsの元ネタのJSが機能閲覧出来たWebサイトが
164
+
165
+ JSエンジン更新でエラー出るようになったという事は許されないので、
166
+
167
+ 下位互換周りはかなり強いのでちょっと古いバージョンでも良いので指定すれば良いと思います。
168
+
169
+
170
+
171
+ [リリースノートのv3.3.3](https://github.com/nexe/nexe/releases/tag/v3.3.3)に書いてある最新のバイナリを取ってきて
172
+
173
+ `nexe -t windows-x86-14.15.3`
174
+
175
+ こんな感じにすれば先に進めるんじゃないですかね?
176
+
177
+
178
+
179
+ ダメなら該当のNode.jsのバージョンをどうにか連れてきて進める感じになるでしょう。
180
+
181
+ Dockerとかに任せた方が良いかもわからんね