ember-cli 3.28.1 → 4.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +4 -0
- package/CHANGELOG.md +70 -0
- package/README.md +1 -1
- package/blueprints/addon/additional-dev-dependencies.json +1 -1
- package/blueprints/addon/files/.github/workflows/ci.yml +73 -0
- package/blueprints/addon/files/.travis.yml +1 -1
- package/blueprints/addon/files/addon-config/ember-try.js +3 -0
- package/blueprints/addon/files/npmignore +4 -0
- package/blueprints/addon/index.js +14 -5
- package/blueprints/app/files/.eslintignore +3 -0
- package/blueprints/app/files/.eslintrc.js +1 -1
- package/blueprints/app/files/.github/workflows/ci.yml +41 -0
- package/blueprints/app/files/.prettierignore +4 -0
- package/blueprints/app/files/config/targets.js +0 -15
- package/blueprints/app/files/gitignore +3 -0
- package/blueprints/app/files/package.json +15 -16
- package/blueprints/app/index.js +23 -2
- package/docs/build/classes/Addon.html +1 -1
- package/docs/build/classes/AmdTransformAddon.html +1 -1
- package/docs/build/classes/Blueprint.html +1 -1
- package/docs/build/classes/Builder.html +1 -1
- package/docs/build/classes/CLI.html +1 -1
- package/docs/build/classes/Command.html +1 -1
- package/docs/build/classes/DefaultPackager.html +1 -1
- package/docs/build/classes/EmberAddon.html +39 -39
- package/docs/build/classes/EmberApp.html +39 -39
- package/docs/build/classes/HardwareInfo.html +1 -1
- package/docs/build/classes/HistorySupportAddon.html +1 -1
- package/docs/build/classes/Instrumentation.html +1 -1
- package/docs/build/classes/NodeModulesList.html +1 -1
- package/docs/build/classes/NpmTask.html +4 -4
- package/docs/build/classes/PackageInfo.html +1 -1
- package/docs/build/classes/PackageInfoCache.html +1 -1
- package/docs/build/classes/PerBundleAddonCache {.html +1 -1
- package/docs/build/classes/Project.html +1 -1
- package/docs/build/classes/ServeFilesAddon.html +1 -1
- package/docs/build/classes/TestsServerAddon.html +1 -1
- package/docs/build/classes/WatcherAddon.html +1 -1
- package/docs/build/classes/WindowsSymlinkChecker.html +1 -1
- package/docs/build/data.json +36 -36
- package/docs/build/files/lib_broccoli_default-packager.js.html +1 -1
- package/docs/build/files/lib_broccoli_ember-addon.js.html +1 -1
- package/docs/build/files/lib_broccoli_ember-app.js.html +63 -21
- package/docs/build/files/lib_cli_cli.js.html +1 -1
- package/docs/build/files/lib_models_addon-info.js.html +1 -1
- package/docs/build/files/lib_models_addon.js.html +1 -1
- package/docs/build/files/lib_models_blueprint.js.html +5 -5
- package/docs/build/files/lib_models_builder.js.html +1 -1
- package/docs/build/files/lib_models_command.js.html +1 -1
- package/docs/build/files/lib_models_hardware-info.js.html +1 -1
- package/docs/build/files/lib_models_host-info-cache.js.html +1 -1
- package/docs/build/files/lib_models_installation-checker.js.html +1 -1
- package/docs/build/files/lib_models_instantiate-addons.js.html +1 -1
- package/docs/build/files/lib_models_instrumentation.js.html +1 -1
- package/docs/build/files/lib_models_package-info-cache_index.js.html +1 -1
- package/docs/build/files/lib_models_package-info-cache_node-modules-list.js.html +1 -1
- package/docs/build/files/lib_models_package-info-cache_package-info.js.html +1 -1
- package/docs/build/files/lib_models_per-bundle-addon-cache_addon-proxy.js.html +1 -1
- package/docs/build/files/lib_models_per-bundle-addon-cache_index.js.html +1 -1
- package/docs/build/files/lib_models_per-bundle-addon-cache_target-instance.js.html +1 -1
- package/docs/build/files/lib_models_project.js.html +1 -1
- package/docs/build/files/lib_models_task.js.html +1 -1
- package/docs/build/files/lib_tasks_build-watch.js.html +1 -1
- package/docs/build/files/lib_tasks_npm-task.js.html +134 -46
- package/docs/build/files/lib_tasks_serve.js.html +1 -1
- package/docs/build/files/lib_tasks_server_middleware_broccoli-serve-files_index.js.html +1 -1
- package/docs/build/files/lib_tasks_server_middleware_broccoli-watcher_index.js.html +1 -1
- package/docs/build/files/lib_tasks_server_middleware_history-support_index.js.html +1 -1
- package/docs/build/files/lib_tasks_server_middleware_tests-server_index.js.html +1 -1
- package/docs/build/files/lib_tasks_test-server.js.html +1 -1
- package/docs/build/files/lib_tasks_transforms_amd_index.js.html +1 -1
- package/docs/build/files/lib_utilities_ember-app-utils.js.html +1 -1
- package/docs/build/files/lib_utilities_insert-into-file.js.html +1 -1
- package/docs/build/files/lib_utilities_is-lazy-engine.js.html +1 -1
- package/docs/build/files/lib_utilities_is-yarn-project.js.html +1 -1
- package/docs/build/files/lib_utilities_valid-project-name.js.html +1 -1
- package/docs/build/files/lib_utilities_will-interrupt-process.js.html +1 -1
- package/docs/build/files/lib_utilities_windows-admin.js.html +1 -1
- package/docs/build/index.html +2 -2
- package/docs/build/modules/ember-cli.html +2 -2
- package/docs/build/modules/is-lazy-engine.html +1 -1
- package/docs/perf-guide.md +2 -0
- package/lib/broccoli/ember-app.js +62 -20
- package/lib/commands/addon.js +6 -0
- package/lib/commands/init.js +9 -1
- package/lib/commands/install.js +9 -1
- package/lib/commands/new.js +6 -0
- package/lib/models/blueprint.js +4 -4
- package/lib/tasks/addon-install.js +10 -1
- package/lib/tasks/generate-from-blueprint.js +0 -1
- package/lib/tasks/install-blueprint.js +1 -1
- package/lib/tasks/npm-install.js +2 -2
- package/lib/tasks/npm-task.js +133 -45
- package/lib/tasks/npm-uninstall.js +2 -2
- package/package.json +2 -2
- package/tests/helpers/dist-checker.js +21 -1
- package/tests/helpers/ember.js +2 -2
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
<div class="version-info">
|
|
72
|
-
Version:
|
|
72
|
+
Version: 4.0.0-beta.2-beta-6d064ff49f
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
75
|
</div>
|
|
@@ -86,6 +86,7 @@
|
|
|
86
86
|
|
|
87
87
|
const chalk = require('chalk');
|
|
88
88
|
const execa = require('../utilities/execa');
|
|
89
|
+
const findUp = require('find-up');
|
|
89
90
|
const semver = require('semver');
|
|
90
91
|
const SilentError = require('silent-error');
|
|
91
92
|
const isYarnProject = require('../utilities/is-yarn-project');
|
|
@@ -110,6 +111,10 @@ class NpmTask extends Task {
|
|
|
110
111
|
this.versionConstraints = '3 || 4 || 5 || 6';
|
|
111
112
|
}
|
|
112
113
|
|
|
114
|
+
get packageManagerOutputName() {
|
|
115
|
+
return this.packageManager.name;
|
|
116
|
+
}
|
|
117
|
+
|
|
113
118
|
npm(args) {
|
|
114
119
|
logger.info('npm: %j', args);
|
|
115
120
|
return execa('npm', args, { preferLocal: false });
|
|
@@ -120,10 +125,19 @@ class NpmTask extends Task {
|
|
|
120
125
|
return execa('yarn', args, { preferLocal: false });
|
|
121
126
|
}
|
|
122
127
|
|
|
128
|
+
pnpm(args) {
|
|
129
|
+
logger.info('pnpm: %j', args);
|
|
130
|
+
return execa('pnpm', args, { preferLocal: false });
|
|
131
|
+
}
|
|
132
|
+
|
|
123
133
|
hasYarnLock() {
|
|
124
134
|
return isYarnProject(this.project.root);
|
|
125
135
|
}
|
|
126
136
|
|
|
137
|
+
async hasPNPMLock() {
|
|
138
|
+
return Boolean(await findUp('pnpm-lock.yaml', { cwd: this.project.root }));
|
|
139
|
+
}
|
|
140
|
+
|
|
127
141
|
async checkYarn() {
|
|
128
142
|
try {
|
|
129
143
|
let result = await this.yarn(['--version']);
|
|
@@ -136,9 +150,7 @@ class NpmTask extends Task {
|
|
|
136
150
|
logger.info('yarn --version: %s', version);
|
|
137
151
|
}
|
|
138
152
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return { yarnVersion: version };
|
|
153
|
+
return { name: 'yarn', version };
|
|
142
154
|
} catch (error) {
|
|
143
155
|
logger.error('yarn --version failed: %s', error);
|
|
144
156
|
|
|
@@ -153,6 +165,28 @@ class NpmTask extends Task {
|
|
|
153
165
|
}
|
|
154
166
|
}
|
|
155
167
|
|
|
168
|
+
async checkPNPM() {
|
|
169
|
+
try {
|
|
170
|
+
let result = await this.pnpm(['--version']);
|
|
171
|
+
let version = result.stdout;
|
|
172
|
+
|
|
173
|
+
logger.info('pnpm --version: %s', version);
|
|
174
|
+
|
|
175
|
+
return { name: 'pnpm', version };
|
|
176
|
+
} catch (error) {
|
|
177
|
+
logger.error('pnpm --version failed: %s', error);
|
|
178
|
+
|
|
179
|
+
if (error.code === 'ENOENT') {
|
|
180
|
+
throw new SilentError(
|
|
181
|
+
'Ember CLI is now using pnpm, but was not able to find it.\n' +
|
|
182
|
+
'Please install pnpm using the instructions at https://pnpm.io/installation'
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
156
190
|
async checkNpmVersion() {
|
|
157
191
|
try {
|
|
158
192
|
let result = await this.npm(['--version']);
|
|
@@ -177,7 +211,7 @@ class NpmTask extends Task {
|
|
|
177
211
|
);
|
|
178
212
|
}
|
|
179
213
|
|
|
180
|
-
return {
|
|
214
|
+
return { name: 'npm', version };
|
|
181
215
|
} catch (error) {
|
|
182
216
|
logger.error('npm --version failed: %s', error);
|
|
183
217
|
|
|
@@ -206,37 +240,55 @@ class NpmTask extends Task {
|
|
|
206
240
|
* @method findPackageManager
|
|
207
241
|
* @return {Promise}
|
|
208
242
|
*/
|
|
209
|
-
async findPackageManager() {
|
|
210
|
-
if (
|
|
243
|
+
async findPackageManager(packageManager = null) {
|
|
244
|
+
if (packageManager === 'yarn') {
|
|
211
245
|
logger.info('yarn requested -> trying yarn');
|
|
212
246
|
return this.checkYarn();
|
|
213
247
|
}
|
|
214
248
|
|
|
215
|
-
if (
|
|
249
|
+
if (packageManager === 'npm') {
|
|
216
250
|
logger.info('npm requested -> using npm');
|
|
217
251
|
return this.checkNpmVersion();
|
|
218
252
|
}
|
|
219
253
|
|
|
220
|
-
if (
|
|
221
|
-
logger.info('
|
|
222
|
-
return this.
|
|
254
|
+
if (packageManager === 'pnpm') {
|
|
255
|
+
logger.info('pnpm requested -> using pnpm');
|
|
256
|
+
return this.checkPNPM();
|
|
223
257
|
}
|
|
224
258
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
259
|
+
if (this.hasYarnLock()) {
|
|
260
|
+
logger.info('yarn.lock found -> trying yarn');
|
|
261
|
+
try {
|
|
262
|
+
const yarnResult = await this.checkYarn();
|
|
263
|
+
logger.info('yarn found -> using yarn');
|
|
264
|
+
return yarnResult;
|
|
265
|
+
} catch (_err) {
|
|
266
|
+
logger.info('yarn not found');
|
|
267
|
+
}
|
|
268
|
+
} else {
|
|
269
|
+
logger.info('yarn.lock not found');
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (this.hasPNPMLock()) {
|
|
273
|
+
logger.info('pnpm-lock.yaml found -> trying pnpm');
|
|
274
|
+
try {
|
|
275
|
+
let result = await this.checkPNPM();
|
|
276
|
+
logger.info('pnpm found -> using pnpm');
|
|
277
|
+
return result;
|
|
278
|
+
} catch (_err) {
|
|
279
|
+
logger.info('pnpm not found');
|
|
280
|
+
}
|
|
281
|
+
} else {
|
|
282
|
+
logger.info('pnpm-lock.yaml not found');
|
|
233
283
|
}
|
|
284
|
+
|
|
285
|
+
logger.info('using npm');
|
|
286
|
+
return this.checkNpmVersion();
|
|
234
287
|
}
|
|
235
288
|
|
|
236
289
|
async run(options) {
|
|
237
|
-
this.
|
|
290
|
+
this.packageManager = await this.findPackageManager(options.packageManager);
|
|
238
291
|
|
|
239
|
-
let result = await this.findPackageManager();
|
|
240
292
|
let ui = this.ui;
|
|
241
293
|
let startMessage = this.formatStartMessage(options.packages);
|
|
242
294
|
let completeMessage = this.formatCompleteMessage(options.packages);
|
|
@@ -247,31 +299,37 @@ class NpmTask extends Task {
|
|
|
247
299
|
ui.writeLine(prependEmoji('🚧', 'Installing packages... This might take a couple of minutes.'));
|
|
248
300
|
ui.startProgress(chalk.green(startMessage));
|
|
249
301
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
302
|
+
try {
|
|
303
|
+
if (this.packageManager.name === 'yarn') {
|
|
304
|
+
let args = this.toYarnArgs(this.command, options);
|
|
305
|
+
await this.yarn(args);
|
|
306
|
+
} else if (this.packageManager.name === 'pnpm') {
|
|
307
|
+
let args = this.toPNPMArgs(this.command, options);
|
|
308
|
+
await this.pnpm(args);
|
|
309
|
+
} else {
|
|
310
|
+
let args = this.toNpmArgs(this.command, options);
|
|
311
|
+
await this.npm(args);
|
|
312
|
+
|
|
313
|
+
// as of 2018-10-09 npm 5 and 6 _break_ the hierarchy of `node_modules`
|
|
314
|
+
// after a `npm install foo` (deletes files/folders other than
|
|
315
|
+
// what was directly installed) in some circumstances, see:
|
|
316
|
+
//
|
|
317
|
+
// * https://github.com/npm/npm/issues/16853
|
|
318
|
+
// * https://github.com/npm/npm/issues/17379
|
|
319
|
+
//
|
|
320
|
+
// this ensures that we run a full `npm install` **after** any `npm
|
|
321
|
+
// install foo` runs to ensure that we have a fully functional
|
|
322
|
+
// node_modules hierarchy
|
|
323
|
+
let npmVersion = this.packageManager.version;
|
|
324
|
+
if (npmVersion && semver.lt(npmVersion, '5.7.1')) {
|
|
325
|
+
await this.npm(['install']);
|
|
326
|
+
}
|
|
271
327
|
}
|
|
328
|
+
} finally {
|
|
329
|
+
ui.stopProgress();
|
|
272
330
|
}
|
|
273
331
|
|
|
274
|
-
|
|
332
|
+
ui.writeLine(chalk.green(completeMessage));
|
|
275
333
|
}
|
|
276
334
|
|
|
277
335
|
toNpmArgs(command, options) {
|
|
@@ -294,9 +352,9 @@ class NpmTask extends Task {
|
|
|
294
352
|
}
|
|
295
353
|
|
|
296
354
|
if (options.verbose) {
|
|
297
|
-
args.push('--loglevel verbose');
|
|
355
|
+
args.push('--loglevel', 'verbose');
|
|
298
356
|
} else {
|
|
299
|
-
args.push('--loglevel error');
|
|
357
|
+
args.push('--loglevel', 'error');
|
|
300
358
|
}
|
|
301
359
|
|
|
302
360
|
if (options.packages) {
|
|
@@ -344,13 +402,43 @@ class NpmTask extends Task {
|
|
|
344
402
|
// Yarn v2 defaults to non-interactive
|
|
345
403
|
// with an optional -i flag
|
|
346
404
|
|
|
347
|
-
if (semver.lt(this.
|
|
405
|
+
if (semver.lt(this.packageManager.version, '2.0.0')) {
|
|
348
406
|
args.push('--non-interactive');
|
|
349
407
|
}
|
|
350
408
|
|
|
351
409
|
return args;
|
|
352
410
|
}
|
|
353
411
|
|
|
412
|
+
toPNPMArgs(command, options) {
|
|
413
|
+
let args = [];
|
|
414
|
+
|
|
415
|
+
if (command === 'install') {
|
|
416
|
+
if (options.save) {
|
|
417
|
+
args.push('add');
|
|
418
|
+
} else if (options['save-dev']) {
|
|
419
|
+
args.push('add', '--save-dev');
|
|
420
|
+
} else if (options.packages) {
|
|
421
|
+
throw new Error(`npm command "${command} ${options.packages.join(' ')}" can not be translated to pnpm command`);
|
|
422
|
+
} else {
|
|
423
|
+
args.push('install');
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
if (options['save-exact']) {
|
|
427
|
+
args.push('--save-exact');
|
|
428
|
+
}
|
|
429
|
+
} else if (command === 'uninstall') {
|
|
430
|
+
args.push('remove');
|
|
431
|
+
} else {
|
|
432
|
+
throw new Error(`npm command "${command}" can not be translated to pnpm command`);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
if (options.packages) {
|
|
436
|
+
args = args.concat(options.packages);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
return args;
|
|
440
|
+
}
|
|
441
|
+
|
|
354
442
|
formatStartMessage(/* packages */) {
|
|
355
443
|
return '';
|
|
356
444
|
}
|
package/docs/build/index.html
CHANGED
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
<div class="version-info">
|
|
72
|
-
Version:
|
|
72
|
+
Version: 4.0.0-beta.2-beta-6d064ff49f
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
75
|
</div>
|
|
@@ -107,7 +107,7 @@ the in-depth documentation.</p>
|
|
|
107
107
|
<p>Please see the <a href="https://github.com/ember-cli/ember-cli/blob/master/CONTRIBUTING.md">contributing guidelines</a></p>
|
|
108
108
|
<h2>Community</h2>
|
|
109
109
|
<ul>
|
|
110
|
-
<li>Discord: <a href="https://
|
|
110
|
+
<li>Discord: <a href="https://discord.gg/emberjs">Get your invite</a></li>
|
|
111
111
|
<li>Issues: <a href="https://github.com/ember-cli/ember-cli/issues">ember-cli/issues</a></li>
|
|
112
112
|
<li>Documentation: <a href="https://cli.emberjs.com/release/">ember-cli.com</a></li>
|
|
113
113
|
</ul>
|
|
@@ -96,14 +96,14 @@
|
|
|
96
96
|
|
|
97
97
|
|
|
98
98
|
<div class="version-info">
|
|
99
|
-
Version:
|
|
99
|
+
Version: 4.0.0-beta.2-beta-6d064ff49f
|
|
100
100
|
</div>
|
|
101
101
|
|
|
102
102
|
</div>
|
|
103
103
|
|
|
104
104
|
<div id="main" class="yui3-u">
|
|
105
105
|
<div class="content"><div class="title">
|
|
106
|
-
<span class="source-link"><a href="../files/lib_tasks_npm-task.js.html#
|
|
106
|
+
<span class="source-link"><a href="../files/lib_tasks_npm-task.js.html#l17"><code>lib/tasks/npm-task.js:17</code></a></span>
|
|
107
107
|
<h1 class="module-name">ember-cli</h1>
|
|
108
108
|
</div>
|
|
109
109
|
|
package/docs/perf-guide.md
CHANGED
|
@@ -238,6 +238,8 @@ To generate visualization:
|
|
|
238
238
|
|
|
239
239
|
|
|
240
240
|
Each build will generate an additional graph, `instrumentation.build.<build-number>.json`
|
|
241
|
+
|
|
242
|
+
Alternatively, you can upload the JSON file to https://heimdalljs.github.io/heimdalljs-visualizer/
|
|
241
243
|
|
|
242
244
|
#### in-depth look
|
|
243
245
|
|