回答編集履歴

3

npm root -g -> npm bin -gに修正

2018/01/09 09:27

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -104,15 +104,15 @@
104
104
 
105
105
  まずはグローバル領域に関する事をみていきましょう。
106
106
 
107
- npmのグローバル領域は`npm root -g`コマンドで確認することができます。
107
+ npmのグローバル領域は`npm bin -g`コマンドで確認することができます。
108
108
 
109
109
  `npm install -g gulp`等のコマンドのように`-g`オプションを付けて実行すると、
110
110
 
111
- `npm root -g`で表示されるパスに実行ファイルが設置されます。
111
+ `npm bin -g`で表示されるパスに実行ファイルが設置されます。
112
-
113
-
114
-
112
+
113
+
114
+
115
- ですが、その`npm root -g`は環境変数のPATHに入っていますか?
115
+ ですが、その`npm bin -g`は環境変数のPATHに入っていますか?
116
116
 
117
117
  本当に?実際に下記2つのコマンドを実行して確認してみてください。
118
118
 
@@ -120,7 +120,7 @@
120
120
 
121
121
  ```Bash
122
122
 
123
- $ npm root -g
123
+ $ npm bin -g
124
124
 
125
125
  $ echo $PATH
126
126
 
@@ -136,7 +136,7 @@
136
136
 
137
137
  恐らく質問文の状況は`npm install --save-dev gulp`なので、
138
138
 
139
- `npm root -g`で表示されるパスには含まれていないと思います。
139
+ `npm bin -g`で表示されるパスには含まれていないと思います。
140
140
 
141
141
  下記コマンドを実行して追加される事を確認してみてください。
142
142
 
@@ -144,7 +144,7 @@
144
144
 
145
145
  ```Bash
146
146
 
147
- $ ls $(npm root -g)
147
+ $ ls $(npm bin -g)
148
148
 
149
149
  // gulp ファイルはありますか?
150
150
 
@@ -154,7 +154,7 @@
154
154
 
155
155
 
156
156
 
157
- $ ls $(npm root -g)
157
+ $ ls $(npm bin -g)
158
158
 
159
159
  gulp
160
160
 

2

windowsのリンクがミスってたのを修正

2018/01/09 09:27

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -36,7 +36,7 @@
36
36
 
37
37
 
38
38
 
39
- - [Windows 環境変数 Path の設定方法](next.matrix.jp/config-path-win7.html)
39
+ - [Windows 環境変数 Path の設定方法](http://next.matrix.jp/config-path-win7.html)
40
40
 
41
41
  - [PATHを通すために環境変数の設定を理解する (Mac OS X)](https://qiita.com/soarflat/items/d5015bec37f8a8254380)
42
42
 

1

回筆修正

2018/01/09 09:07

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -8,24 +8,198 @@
8
8
 
9
9
 
10
10
 
11
- 普通npmモジュールの内、コマンドラインとして利用出来るパッケージも存在しますが、
12
-
13
- その場合`npm install -g gulp`のようにグローバルインストールする必要があります。
14
-
15
-
16
-
17
11
  ---
18
12
 
19
13
 
20
14
 
15
+ 【追記部分】CLIの操作とパスに関して
16
+
17
+
18
+
19
+ 一旦レベルを落としましょう。
20
+
21
+ 今回の質問は`gulp`というコマンドが認識されない、認識して欲しいが要件ですからね。
22
+
23
+ どうなれば条件達成なのかを知るという意味で軽くおさらいしましょう。
24
+
25
+
26
+
27
+ ターミナルに打ち込まれた`コマンド`は誰がどういう順番で解析して、
28
+
29
+ 何が実行されているか確認したことはありますか?
30
+
31
+
32
+
33
+ それを紐解く為には環境変数のPATHの理解が必要となります。
34
+
35
+ まずは貴方のパソコン内の環境変数のPATHを表示してみてください。
36
+
37
+
38
+
39
+ - [Windows 環境変数 Path の設定方法](next.matrix.jp/config-path-win7.html)
40
+
41
+ - [PATHを通すために環境変数の設定を理解する (Mac OS X)](https://qiita.com/soarflat/items/d5015bec37f8a8254380)
42
+
43
+
44
+
45
+ ```Bash
46
+
47
+ # Windows の場合
48
+
49
+ $ path
50
+
51
+ C:\Windows;C:\Windows\System32;....
52
+
53
+
54
+
55
+ # MacOS / Linux の場合
56
+
57
+ $ echo $PATH
58
+
59
+ /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:...
60
+
61
+ ```
62
+
63
+
64
+
65
+ Windows, MacOS, Linuxなどなど…多少の差異はありますが概ねこんな感じです。
66
+
67
+ Windowsの場合は`;`が区切り文字、MacOSやLinuxでは`:`が区切り文字として扱われます。
68
+
69
+
70
+
71
+ コマンドラインで何かしらのコマンドが実行された場合、
72
+
73
+ この環境変数PATHの文字列の左から順にコマンドあるかな?…と探しにいき、
74
+
75
+ そのフォルダの配下に実行ファイルがあればそれを使って実行…という流れになっています。
76
+
77
+
78
+
79
+ 環境変数PATHで記されたいくつかのディレクトリがありますが、
80
+
81
+ その中の直下に`gulp`というファイルがなければ
82
+
83
+ 「gulp?そんなコマンドねーよ」というエラーが帰ってきます。
84
+
85
+
86
+
87
+ ---
88
+
89
+
90
+
91
+ 【追記部分】npmのグローバルインストールと環境変数PATH
92
+
93
+
94
+
95
+ npmのインストールには2つの概念があります。
96
+
97
+
98
+
99
+ - グローバル
100
+
101
+ - ローカル(package.jsonと同階層≒プロジェクトルート)
102
+
103
+
104
+
105
+ まずはグローバル領域に関する事をみていきましょう。
106
+
107
+ npmのグローバル領域は`npm root -g`コマンドで確認することができます。
108
+
109
+ `npm install -g gulp`等のコマンドのように`-g`オプションを付けて実行すると、
110
+
111
+ `npm root -g`で表示されるパスに実行ファイルが設置されます。
112
+
113
+
114
+
115
+ ですが、その`npm root -g`は環境変数のPATHに入っていますか?
116
+
117
+ 本当に?実際に下記2つのコマンドを実行して確認してみてください。
118
+
119
+
120
+
121
+ ```Bash
122
+
123
+ $ npm root -g
124
+
125
+ $ echo $PATH
126
+
127
+ ```
128
+
129
+
130
+
131
+ 含まれていれば一安心。
132
+
133
+ 含まれていなければ上記の環境変数に関しての記事を閲覧してください。
134
+
135
+
136
+
137
+ 恐らく質問文の状況は`npm install --save-dev gulp`なので、
138
+
139
+ `npm root -g`で表示されるパスには含まれていないと思います。
140
+
141
+ 下記コマンドを実行して追加される事を確認してみてください。
142
+
143
+
144
+
145
+ ```Bash
146
+
147
+ $ ls $(npm root -g)
148
+
149
+ // gulp ファイルはありますか?
150
+
151
+
152
+
153
+ $ npm install -g gulp
154
+
155
+
156
+
157
+ $ ls $(npm root -g)
158
+
159
+ gulp
160
+
161
+
162
+
163
+ $ gulp --version
164
+
165
+ 5.5.1
166
+
167
+ ```
168
+
169
+
170
+
171
+ ---
172
+
173
+
174
+
175
+ 【プチ加筆】応用編、ローカルを上手く使う
176
+
177
+
178
+
179
+ 貴方がデザイナー的な立場の人間でNode.jsとかもう使わんし!
180
+
181
+ …というのであれば前項まで行えば使える様になっているはずです。
182
+
183
+
184
+
21
- ブログを見ると`npm install --save-dev gulp`を推奨している記事がありますね。
185
+ ブログやQiitaの記事等を見れば`npm install --save-dev gulp`を推奨している記事がありますね。
186
+
22
-
187
+ これを利用すると、package.jsonが存在するディレクトリと同階層に`node_modules/.bin`というフォルダを作成して、その中に`gulp`の実行ファイルを投げ込みます。
188
+
189
+
190
+
191
+ あれ、ちょっとまって。
192
+
193
+ 環境変数のPATHに通してないコマンドは認識しないってことは、
194
+
23
- グローバルインストールしないと使えないんじゃないの?
195
+ グローバルインストールしないと`gulp`コマンド使えないんじゃないの?
196
+
197
+ 意味なくね?
198
+
199
+
24
200
 
25
201
  実は開発者用インストールには抜け道があります。
26
202
 
27
-
28
-
29
203
  [npm で依存もタスクも一元化する](https://qiita.com/Jxck_/items/efaff21b977ddc782971)
30
204
 
31
205
 
@@ -38,11 +212,17 @@
38
212
 
39
213
 
40
214
 
215
+ $ ls $(npm bin)
216
+
217
+ // <- gulpファイルはない
218
+
219
+
220
+
41
221
  $ npm install -D gulp
42
222
 
43
223
 
44
224
 
45
- $ ls node_modules/.bin | grep gulp
225
+ $ ls
46
226
 
47
227
  gulp // <- 追加されてる事を確認
48
228
 
@@ -56,12 +236,42 @@
56
236
 
57
237
 
58
238
 
239
+ どのOSでもそうですが、実は環境変数PATHに入っていないプログラムも、
240
+
241
+ `/`や`./`等のディレクトリを指定する文字列から始まるコマンドは、実行ファイルを見つけて直接実行する仕様だからです。
242
+
243
+
244
+
245
+ なので、package.jsonが入っているディレクトリの中で
246
+
247
+ `./node_modules/.bin/gulp`や`$(npm bin)/gulp`などと入力して直接実行ファイルを叩けば実行出来るわけです。
248
+
249
+
250
+
251
+ しかしこれではまだ不便ですね。
252
+
253
+ こんな長ったらしいコマンド毎回打ってられないぞ…なんとかならんか?
254
+
255
+
256
+
257
+ ---
258
+
259
+
260
+
261
+ 【加筆修正】応用編、ローカルインストールとnpm-scriptsと併用する
262
+
263
+
264
+
59
265
  更にpackage.jsonのscriptsからの起動(所謂npm-scripts)を利用した場合、
60
266
 
61
267
  環境変数のPATHに`npm bin`が足された状態で起動します。
62
268
 
63
269
 
64
270
 
271
+ package.json (の内のscripts内の項目)
272
+
273
+
274
+
65
275
  ```JSON
66
276
 
67
277
  "scripts": {
@@ -78,25 +288,33 @@
78
288
 
79
289
  いやいや、色々出来て便利なんですこれ。
80
290
 
81
-
291
+ では下記の通りにコマンドを打ち込んでみましょう。
82
-
292
+
293
+
294
+
83
- ```Bash
295
+ ```Bash
296
+
297
+ $ ls $(npm bin)
298
+
299
+ gulp // <- gulpの実行ファイルが存在することを確認
300
+
301
+
84
302
 
85
303
  $ npm run gulp --version
86
304
 
87
- 5.5.1
305
+ 5.5.1 // npm-scriptsによって`gulp`コマンドが発火、パスも通ってる!
88
306
 
89
307
 
90
308
 
91
309
  $ npm run gulp --tasks
92
310
 
93
- // 登録されているタスクの一覧
311
+ // 登録されているタスクの一覧も見れる!
94
312
 
95
313
 
96
314
 
97
315
  $ npm run gulp build
98
316
 
99
- // ビルド処理が実行
317
+ // ビルド処理がちゃんと動いた!
100
318
 
101
319
  ```
102
320