1.客户内网环境无法使用 arcgis 在线资源安装包,因此使用了离线静态资源包
静态资源位置:public/G423
package.json 配置:scripts:{"copy": "ncp ./node_modules/@arcgis/core/assets ./public/arcgisAssets"}
2.客户内网环境无法安装使用公司内部组件库,因此使用了离线静态资源包
静态资源位置:src/lib/custom-component
package.json 配置:dependencies:{ "sharewin-ui-vue": "file:./src/lib/custom-component"}
3.echarts 散点图拟合,官方提供的的指数拟合方法与客户的 excel 拟合效果不一致,因此修改了 echrts-stat 源码,新增了 exponentialexcel 算法,并打了补丁供其他开发者下载安装。
安装 patch-package===》pakcge.json 中配置:scripts:{"postinstall": "patch-package"}===》修改源码===》yarn patch-package echarts-stat===》 根目录生成 patches/echarts-stat+1.2.0.patch 补丁包===》提交补丁至 git 仓库,其他开发者可直接拉取补丁并在安装依赖时自动应用。
注意:patch-package 不支持 cnpm、pnpm,仅支持 npm、yarn,因此最好使用 yran 打补丁
附echarts-stat指数excel拟合算法:
exponentialexcel: function (data) {
var predata1 = dataPreprocess(data);
var sumX = 0;
var sumY = 0;
var sumXXY = 0;
var sumYlny = 0;
var sumXYlny = 0;
var sumXY = 0;
var sumX = 0;
var sumY = 0;
var sumXY = 0;
var sumXX = 0;
var len = predata1.length;
var predata = [];
for (var i = 0; i < len; i++) {
if (predata1[i][1] <= 1e-10) {
continue;
}
var coordinate = [predata1[i][0], Math.log(predata1[i][1])];
predata.push(coordinate);
}
len = predata.length;
for (var i = 0; i < len; i++) {
sumX += predata[i][0];
sumY += predata[i][1];
sumXY += predata[i][0] * predata[i][1];
sumXX += predata[i][0] * predata[i][0];
}
var gradient = ((len * sumXY) - (sumX * sumY)) / ((len * sumXX) - (sumX * sumX));
var intercept = (sumY / len) - ((gradient * sumX) / len);
var a = Math.pow(Math.E, intercept);
var b = gradient;
var result = [];
var y2 = [];
var yAve = 0;
for (var j = 0; j < predata.length; j++) {
var coordinate = [predata[j][0], a * Math.pow(Math.E, b * predata[j][0])];
result.push(coordinate);
var coorY = Math.log(a) + b * predata[j][0];
yAve += coorY;
y2.push(coorY)
}
yAve /= predata.length;
var ssr = 0;
var sst = 0;
for (var i = 0; i < predata.length; i++) {
var s1 = y2[i] - yAve;
ssr += s1 * s1;
var s2 = predata[i][1] - yAve;
sst += s2 * s2;
}
var r2 = ssr / sst;
var string = 'y = ' + Math.round(a * 10000) / 10000 + 'e^' + Math.round(b * 10000) / 10000 + 'x \r\n R² = ' + Math.round(r2 * 10000) / 10000;
return {
points: result,
parameter: {
coefficient: a,
index: b
},
expression: string
};
},
4.当无论如何总是删不掉node-modules时,可以安装rimraf,然后使用rimraf node_modules删除依赖