fix(docs-infra): include correct dependencies in StackBlitz examples (#36071)
Previously, all StackBlitz examples included the default dependencies for `cli`-type projects. However, different example types may have different `package.json` files with different dependencies. For example, the [boilerplate `package.json`][1] for `elements` examples includes an extra dependency on `@angular/elements`. This commit changes `StackblitzBuilder` to use the dependencies that correspond to each example type. (NOTE: Manually verified the changes.) Jira issue: [FW-2002][2] [1]: https://github.com/angular/angular/blob/05d058622/aio/tools/examples/shared/boilerplate/elements/package.json [2]: https://angular-team.atlassian.net/browse/FW-2002 PR Close #36071
This commit is contained in:
parent
9cc8bd5f7d
commit
c21c46a8e8
@ -13,16 +13,8 @@ class StackblitzBuilder {
|
|||||||
this.basePath = basePath;
|
this.basePath = basePath;
|
||||||
this.destPath = destPath;
|
this.destPath = destPath;
|
||||||
|
|
||||||
// Extract npm package dependencies
|
|
||||||
const packageJson = require(path.join(__dirname, '../examples/shared/boilerplate/cli/package.json'));
|
|
||||||
this.examplePackageDependencies = packageJson.dependencies;
|
|
||||||
|
|
||||||
// Add unit test packages from devDependency for unit test examples
|
|
||||||
const devDependencies = packageJson.devDependencies;
|
|
||||||
this.examplePackageDependencies['jasmine-core'] = devDependencies['jasmine-core'];
|
|
||||||
this.examplePackageDependencies['jasmine-marbles'] = devDependencies['jasmine-marbles'];
|
|
||||||
|
|
||||||
this.copyrights = this._buildCopyrightStrings();
|
this.copyrights = this._buildCopyrightStrings();
|
||||||
|
this._boilerplatePackageJsons = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
@ -42,8 +34,34 @@ class StackblitzBuilder {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
_addDependencies(postData) {
|
_addDependencies(config, postData) {
|
||||||
postData['dependencies'] = JSON.stringify(this.examplePackageDependencies);
|
// Extract npm package dependencies
|
||||||
|
const exampleType = this._getExampleType(config.basePath);
|
||||||
|
const packageJson = this._getBoilerplatePackageJson(exampleType) || this._getBoilerplatePackageJson('cli');
|
||||||
|
const exampleDependencies = packageJson.dependencies;
|
||||||
|
|
||||||
|
// Add unit test packages from devDependencies for unit test examples
|
||||||
|
const devDependencies = packageJson.devDependencies;
|
||||||
|
['jasmine-core', 'jasmine-marbles'].forEach(dep => exampleDependencies[dep] = devDependencies[dep]);
|
||||||
|
|
||||||
|
postData.dependencies = JSON.stringify(exampleDependencies);
|
||||||
|
}
|
||||||
|
|
||||||
|
_getExampleType(exampleDir) {
|
||||||
|
const configPath = `${exampleDir}/example-config.json`;
|
||||||
|
const configSrc = fs.existsSync(configPath) && fs.readFileSync(configPath, 'utf-8').trim();
|
||||||
|
const config = configSrc ? JSON.parse(configSrc) : {};
|
||||||
|
|
||||||
|
return config.projectType || 'cli';
|
||||||
|
}
|
||||||
|
|
||||||
|
_getBoilerplatePackageJson(exampleType) {
|
||||||
|
if (!this._boilerplatePackageJsons.hasOwnProperty(exampleType)) {
|
||||||
|
const pkgJsonPath = `${__dirname}/../examples/shared/boilerplate/${exampleType}/package.json`;
|
||||||
|
this._boilerplatePackageJsons[exampleType] = fs.existsSync(pkgJsonPath) ? require(pkgJsonPath) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this._boilerplatePackageJsons[exampleType];
|
||||||
}
|
}
|
||||||
|
|
||||||
_buildCopyrightStrings() {
|
_buildCopyrightStrings() {
|
||||||
@ -76,7 +94,7 @@ class StackblitzBuilder {
|
|||||||
try {
|
try {
|
||||||
const config = this._initConfigAndCollectFileNames(configFileName);
|
const config = this._initConfigAndCollectFileNames(configFileName);
|
||||||
const postData = this._createPostData(config, configFileName);
|
const postData = this._createPostData(config, configFileName);
|
||||||
this._addDependencies(postData);
|
this._addDependencies(config, postData);
|
||||||
const html = this._createStackblitzHtml(config, postData);
|
const html = this._createStackblitzHtml(config, postData);
|
||||||
fs.writeFileSync(outputFileName, html, 'utf-8');
|
fs.writeFileSync(outputFileName, html, 'utf-8');
|
||||||
if (altFileName) {
|
if (altFileName) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user