You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by su...@apache.org on 2022/09/12 18:31:45 UTC
[echarts-examples] 03/04: fix: (1). add back the e2e/package.json, otherwise the dependent packages will be installed into echarts-examples/node_modules. And make some process to prevent it from committing modifications. (2). Fix some dependency install (of zrender, which is the dependency of echarts and echarts-gl).
This is an automated email from the ASF dual-hosted git repository.
sushuang pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/echarts-examples.git
commit b5cfaaeee9aaac4a3c03f02ebe87009300258067
Author: 100pah <su...@gmail.com>
AuthorDate: Tue Sep 13 01:49:01 2022 +0800
fix:
(1). add back the e2e/package.json, otherwise the dependent packages will be installed into echarts-examples/node_modules. And make some process to prevent it from committing modifications.
(2). Fix some dependency install (of zrender, which is the dependency of echarts and echarts-gl).
---
.gitignore | 2 ++
e2e/main.js | 98 +++++++++++++++++++++++++++++++++++++---------------
e2e/package.tpl.json | 12 +++++++
3 files changed, 85 insertions(+), 27 deletions(-)
diff --git a/.gitignore b/.gitignore
index 5e01c252..158ffaee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,8 @@ public/vendors/echarts/map/raw
/public/data-gl/option
/public/examples/js
/e2e/package-lock.json
+/e2e/package.json
+/e2e/node_modules
tmp
.webm
\ No newline at end of file
diff --git a/e2e/main.js b/e2e/main.js
index 2d114367..cb8de9a5 100644
--- a/e2e/main.js
+++ b/e2e/main.js
@@ -129,6 +129,10 @@ async function prepare() {
fse.removeSync(REPO_DIR);
fse.removeSync(PACKAGE_DIR);
+ fse.removeSync(nodePath.join(__dirname, 'package.json'));
+ fse.removeSync(nodePath.join(__dirname, 'package-lock.json'));
+ fse.copySync(nodePath.join(__dirname, 'package.tpl.json'), nodePath.join(__dirname, 'package.json'));
+
fse.ensureDirSync(TMP_DIR);
fse.ensureDirSync(RUN_CODE_DIR);
fse.ensureDirSync(BUNDLE_DIR);
@@ -175,45 +179,82 @@ async function installPackages(config) {
shell.cd(pkg.dir);
- const packageJson = JSON.parse(
- fs.readFileSync(nodePath.join(pkg.dir, 'package.json'))
- );
+ const packageJsonPath = nodePath.join(pkg.dir, 'package.json');
+ const packageJsonRaw = fs.readFileSync(packageJsonPath, {encoding: 'utf-8'});
+ const packageJson = JSON.parse(packageJsonRaw);
const tgzFileName = `${packageJson.name}-${packageJson.version}.tgz`;
const targetTgzFilePath = nodePath.join(PACKAGE_DIR, tgzFileName);
+ let needModifyPackageJSON = false;
+
+ function doesConfigIncludesDepPkg(depPkgName) {
+ return !!config.packages.find((a) => a.name === depPkgName)
+ }
if (packageJson.dependencies) {
for (let depPkgName in packageJson.dependencies) {
- const depPkg = config.packages.find((a) => a.name === depPkgName);
- if (depPkg && !publishedPackages[depPkgName]) {
- publishPackage(depPkg);
- // Come back.
- shell.cd(pkg.dir);
+ if (!doesConfigIncludesDepPkg(depPkgName) || publishedPackages[depPkgName]) {
+ continue;
}
+ publishPackage(depPkg);
+ // Come back.
+ shell.cd(pkg.dir);
+ }
- shell.exec(`npm install`);
+ if (shell.exec(`npm install`).code !== 0) {
+ console.error(`shell fail: npm install in ${pkg.dir}`);
+ process.exit(1);
+ }
- if (depPkg) {
- console.log(
- chalk.gray(
- `Installing dependency ${depPkgName} from "${publishedPackages[depPkgName]}" ...`
- )
- );
- shell.exec(`npm install ${publishedPackages[depPkgName]} --no-save`);
- console.log(chalk.gray(`Install dependency ${depPkgName} done.`));
+ for (let depPkgName in packageJson.dependencies) {
+ if (!doesConfigIncludesDepPkg(depPkgName)) {
+ continue;
}
+ console.log(
+ chalk.gray(
+ `Installing dependency ${depPkgName} from "${publishedPackages[depPkgName].targetTgzFilePath}" ...`
+ )
+ );
+ if (shell.exec(`npm install ${publishedPackages[depPkgName].targetTgzFilePath}`).code !== 0) {
+ console.error(`shell fail: npm install ${publishedPackages[depPkgName].targetTgzFilePath}`);
+ process.exit(1);
+ }
+ // After the npm install above, the package.json will be modifiedt to like:
+ // "dependencies": ["zredner": "file:../echarts-examples/e2e/tmp/packages/zrender-5.3.2.tgz"]
+ // which is a relative path and not correct if the tgz is copied to another place in
+ // the latter process.
+ // If we use --no-save, the latter npm install by tgz may not use the version of zrender that
+ // config.js specified.
+ // So we modifiy the version mandatorily to the version that config.js specified.
+ // In the latter npm install by tgz, the zrender will be installed firstly. And when echarts
+ // is installing, it found the right version of zrender has been installed, and do not install
+ // zrender separately.
+ needModifyPackageJSON = true;
+ packageJson.dependencies[depPkgName] = publishedPackages[depPkgName].version;
+ console.log(chalk.gray(`Install dependency ${depPkgName} done.`));
}
}
- shell.exec(`npm pack`);
+ if (needModifyPackageJSON) {
+ // Modify package.json for npm pack.
+ fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson), {encoding: 'utf-8'});
+ }
+ if (shell.exec(`npm pack`).code !== 0) {
+ console.error(`shell fail: npm pack in ${pkg.dir}`);
+ shell.exit(1);
+ }
fs.renameSync(nodePath.join(pkg.dir, tgzFileName), targetTgzFilePath);
- publishedPackages[packageJson.name] = targetTgzFilePath;
+ publishedPackages[packageJson.name] = {targetTgzFilePath, version: packageJson.version};
+
+ if (needModifyPackageJSON) {
+ // Restore modified package.json
+ fs.writeFileSync(packageJsonPath, packageJsonRaw, {encoding: 'utf-8'});
+ }
}
for (let pkg of config.packages) {
if (!checkFolder(pkg)) {
- return;
+ process.exit(1);
}
-
publishPackage(pkg);
}
@@ -221,10 +262,13 @@ async function installPackages(config) {
for (let pkg of config.packages) {
console.log(
chalk.gray(
- `Installing ${pkg.name} from "${publishedPackages[pkg.name]}" ...`
+ `Installing ${pkg.name} from "${publishedPackages[pkg.name].targetTgzFilePath}" ...`
)
);
- shell.exec(`npm install ${publishedPackages[pkg.name]} --no-save`);
+ if (shell.exec(`npm install ${publishedPackages[pkg.name].targetTgzFilePath}`).code !== 0) {
+ console.log(`shell fail: npm install ${publishedPackages[pkg.name].targetTgzFilePath}`);
+ process.exit(1);
+ }
console.log(chalk.gray(`Install ${pkg.name} done.`));
}
@@ -783,8 +827,8 @@ async function main() {
fs.readFileSync(__dirname + '/tmp/result.json', 'utf-8')
);
} catch (e) {
- console.error(e);
- throw 'Must run full e2e test without --skip and --tests at least once.';
+ console.log(`Can not find ${__dirname}/tmp/result.json. Make a new one.`);
+ result = {};
}
}
@@ -882,7 +926,7 @@ async function main() {
main()
.catch((e) => {
console.error(e);
- process.exit();
+ process.exit(1);
})
.then(() => {
process.exit();
@@ -891,5 +935,5 @@ main()
process.on('SIGINT', function () {
console.log('Closing');
// Close through ctrl + c;
- process.exit();
+ process.exit(1);
});
diff --git a/e2e/package.tpl.json b/e2e/package.tpl.json
new file mode 100644
index 00000000..ce3fba7b
--- /dev/null
+++ b/e2e/package.tpl.json
@@ -0,0 +1,12 @@
+{
+ "description": "DO NOT remove this file, otherwise when e2e/main.js execute npm install, packages will be installed in echarst-examples/node_modules and will be removed because --no-save is used.",
+ "name": "echarts-examples-e2e",
+ "version": "1.0.0",
+ "main": "main.js",
+ "scripts": {},
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "zrender": "file:tmp/packages/zrender-5.3.2.tgz"
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org