因为想做一个阿里云服务器的监控,项目依赖了 @alicloud/ecs20140526
拉取阿里云ECS的信息,然后该组件依赖了 @alicloud/openapi-client
,然后通过该依赖间接依赖了 @alicloud/credentials
。
在本地调试时,没有使用 webpack 将代码打包成一个独立的 index.js
文件,貌似运行一切正常,但在准备部署到线上时,发现怎么都启动不起来。
经过排查发现 @alicloud/credentials
中有一段写死的读取 package.json
的代码。
// @alicloud\credentials\src\util\helper.ts
import * as os from 'os';
import kitx from 'kitx';
import path from 'path';
const pkg = kitx.loadJSONSync(path.join(__dirname, '../../package.json'));
export const DEFAULT_UA = `AlibabaCloud (${os.platform()}; ${os.arch()}) ` +
`Node.js/${process.version} Core/${pkg.version}`;
export const DEFAULT_CLIENT = `Node.js(${process.version}), ${pkg.name}: ${pkg.version}`;
简直是天坑。因为打包成一个文件后,__dirname
就是代码执行的根目录,而所有的代码也都在根目录的 index.js
中,压根不会再向上找两级目录。
只好等空了通过 webpack-loader 魔改一下了,搞不懂为什么阿里云的研发会写这种代码。
注,本文作成时,@alicloud/credentials
的版本号为 2.2.0