关于node.js:在公司环境(无Internet)中创建Angular项目

Creating an Angular project in a corporate environment (no Internet)

我在公司环境中工作,必须代理所有东西(或有空隙)。我们已经安装了Artifactory Pro,以镜像Maven Central,NPM Registry和DockerHub。我们已经使用Maven多年了,它的作用令人惊奇。我们最近开始通过Node.js和npm处理Angular的前端开发。安全要求保持不变。

使用Angular CLI(ng new my-app)创建新的Angular项目时,可以从我们的公司Artifactory实例中获取数百个npm依赖项。但是,几分钟后,该过程将失败,并显示以下消息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
[...]

CREATE my-app5/e2e/src/app.e2e-spec.ts (299 bytes)
CREATE my-app5/e2e/src/app.po.ts (204 bytes)
npm WARN deprecated [email protected]: CircularJSON is in maintenance only, flatted is its successor.
                                                                                                                                                                                                    ms)
> [email protected] install C:\\dev\\angular\\my-app5\
ode_modules\
ode-sass
> node scripts/install.js

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.10.0/win32-x64-64_binding.node
Cannot download"https://github.com/sass/node-sass/releases/download/v4.10.0/win32-x64-64_binding.node":

getaddrinfo ENOTFOUND github.com github.com:443

Hint: If github.com is not accessible in your location
      try setting a proxy via HTTP_PROXY, e.g.

      export HTTP_PROXY=http://example.com:1234

or configure npm proxy via

      npm config set proxy http://example.com:8080

> [email protected] postinstall C:\\dev\\angular\\my-app5\
ode_modules\
ode-sass
> node scripts/build.js

Building: C:\\Program Files\
odejs\
ode.exe C:\\dev\\angular\\my-app5\
ode_modules\
ode-gyp\\bin\
ode-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
gyp info it worked if it ends with ok
gyp verb cli [ 'C:\\\\Program Files\\\
odejs\\\
ode.exe',
gyp verb cli   'C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\
ode-gyp\\\\bin\\\
ode-gyp.js',
gyp verb cli   'rebuild',
gyp verb cli   '--verbose',
gyp verb cli   '--libsass_ext=',
gyp verb cli   '--libsass_cflags=',
gyp verb cli   '--libsass_ldflags=',
gyp verb cli   '--libsass_library=' ]
gyp info using [email protected]
gyp info using [email protected] | win32 | x64
gyp verb command rebuild []
gyp verb command clean []
gyp verb clean removing"build" directory
gyp verb command configure []
gyp verb check python checking for Python executable"python2" in the PATH
gyp verb `which` failed Error: not found: python2
gyp verb `which` failed     at getNotFoundError (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:13:12)
gyp verb `which` failed     at F (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:68:19)
gyp verb `which` failed     at E (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:80:29)
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:89:16
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\index.js:42:5
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\windows.js:36:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed  python2 { Error: not found: python2
gyp verb `which` failed     at getNotFoundError (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:13:12)
gyp verb `which` failed     at F (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:68:19)
gyp verb `which` failed     at E (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:80:29)
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:89:16
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\index.js:42:5
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\windows.js:36:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed   stack:
gyp verb `which` failed    'Error: not found: python2\
    at getNotFoundError (C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:13:12)\
    at F (C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:68:19)\
    at E (C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:80:29)\
    at C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:89:16\
    at C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\isexe\\\\index.js:42:5\
    at C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\isexe\\\\windows.js:36:5\
    at FSReqWrap.oncomplete (fs.js:154:21)',
gyp verb `which` failed   code: 'ENOENT' }
gyp verb check python checking for Python executable"python" in the PATH
gyp verb `which` failed Error: not found: python
gyp verb `which` failed     at getNotFoundError (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:13:12)
gyp verb `which` failed     at F (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:68:19)
gyp verb `which` failed     at E (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:80:29)
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:89:16
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\index.js:42:5
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\windows.js:36:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed  python { Error: not found: python
gyp verb `which` failed     at getNotFoundError (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:13:12)
gyp verb `which` failed     at F (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:68:19)
gyp verb `which` failed     at E (C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:80:29)
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\which\\which.js:89:16
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\index.js:42:5
gyp verb `which` failed     at C:\\dev\\angular\\my-app5\
ode_modules\\isexe\\windows.js:36:5
gyp verb `which` failed     at FSReqWrap.oncomplete (fs.js:154:21)
gyp verb `which` failed   stack:
gyp verb `which` failed    'Error: not found: python\
    at getNotFoundError (C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:13:12)\
    at F (C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:68:19)\
    at E (C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:80:29)\
    at C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\which\\\\which.js:89:16\
    at C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\isexe\\\\index.js:42:5\
    at C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\\isexe\\\\windows.js:36:5\
    at FSReqWrap.oncomplete (fs.js:154:21)',
gyp verb `which` failed   code: 'ENOENT' }
gyp verb could not find"python". checking python launcher
gyp verb could not find"python". guessing location
gyp verb ensuring that file exists: C:\\Python27\\python.exe
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable"python", you can set the PYTHON env variable.
gyp ERR! stack     at PythonFinder.failNoPython (C:\\dev\\angular\\my-app5\
ode_modules\
ode-gyp\\lib\\configure.js:484:19)
gyp ERR! stack     at PythonFinder. (C:\\dev\\angular\\my-app5\
ode_modules\
ode-gyp\\lib\\configure.js:509:16)
gyp ERR! stack     at C:\\dev\\angular\\my-app5\
ode_modules\\graceful-fs\\polyfills.js:282:31
gyp ERR! stack     at FSReqWrap.oncomplete (fs.js:154:21)
gyp ERR! System Windows_NT 10.0.15063
gyp ERR! command"C:\\\\Program Files\\\
odejs\\\
ode.exe""C:\\\\dev\\\\angular\\\\my-app5\\\
ode_modules\\\
ode-gyp\\\\bin\\\
ode-gyp.js""rebuild""--verbose""--libsass_ext=""--libsass_cflags=""--libsass_ldflags=""--libsass_library="
gyp ERR! cwd C:\\dev\\angular\\my-app5\
ode_modules\
ode-sass
gyp ERR! node -v v10.13.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
Build failed with error code: 1
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.2.2 (node_modules\\chokidar\
ode_modules\\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for [email protected]: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: [email protected] (node_modules\\fsevents\
ode_modules\\abbrev):
npm WARN enoent SKIPPING OPTIONAL DEPENDENCY: ENOENT: no such file or directory, rename 'C:\\dev\\angular\\my-app5\
ode_modules\\fsevents\
ode_modules\\abbrev' -> 'C:\\dev\\angular\\my-app5\
ode_modules\\fsevents\
ode_modules\\.abbrev.DELETE'

[...]

其他详细信息

  • 角CLI:7.1.2
  • 节点:10.13.0
  • 操作系统:win32 x64
  • @ angular-devkit /建筑师:0.11.2
  • @ angular-devkit /核心:7.1.2
  • @ angular-devkit /示意图:7.1.2
  • @ schematics /angular:7.1.2
  • @示意图/更新:0.11.2
  • rxjs:6.3.3
  • typescript:3.1.6
  • %USERPROFILE%/。npmrc配置了我们的Artifactory实例

Bottom line is:我希望ng new从A到Z穿过我们的人工工厂,而不是从Internet上获取东西。错误日志提到设置代理,但是在我们的公司环境中该URL被阻止。

有什么想法吗?


我看到了问题。 node-sass安装脚本经过硬编码,可以从github获取。

1
2
3
4
5
$ npm i --verbose node-sass
   ...
> node scripts/install.js

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.11.0/darwin-x64-64_binding.node

在检查了要运行的脚本(node_modules/node-sass/scripts/install.js)之后,我确定可以跳过此额外的下载。它将要求计算机在本地构建它(一次安装,在初次安装时),但是应该有所帮助。

1
$ SKIP_SASS_BINARY_DOWNLOAD_FOR_CI=true npm i --verbose node-sass

旧答案

您可以使用.npmrc文件执行此操作。如果希望将其应用于所有项目,则将其放在用户主目录中(听起来像是您想要的)。

1
2
3
registry=<your registry url>
always-auth=true
_auth=<your auth string>