angular程序9升级到13过程报错

文章讲述了在升级Angular项目从9到13的过程中,遇到Less编译错误,主要原因是关于CSS参数计算的语法问题。作者发现less编译器对运算表达式的处理不同于JavaScript,修正了代码中的语法并提供了解决方案。
摘要由CSDN通过智能技术生成

项目场景:

老版本程序是使用的Angular9,现在需要修改业务,顺便升级到13,保持与其他程序版本一致。

过程中遇到了几个问题,记录一下。

Angular: 13.3.0

ng-zorro-antd: 13.4.0

typescript: 4.6.2


问题描述、

./src/styles.less.webpack[javascript/auto]!=!./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[8].rules[0].oneOf[0].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[8].rules[0].oneOf[0].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[8].rules[1].use[0]!./src/styles.less - Error: Module build failed (from ./node_modules/less-loader/dist/cjs.js):


// ================================================================
.table-size(~'middle', @table-padding-vertical-md, @table-padding-horizontal-md, @table-font-size-md);
^
Operation on an invalid type
      Error in /home/wzg/temporaryXX/jiabaologger20240301/BenanUtilities.Jiabao.TestTool.TestClient/node_modules/ng-zorro-antd/table/style/size.less (line 46, column 0)

./src/styles.less - Error: Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):
HookWebpackError: Module build failed (from ./node_modules/less-loader/dist/cjs.js):


// ================================================================
.table-size(~'middle', @table-padding-vertical-md, @table-padding-horizontal-md, @table-font-size-md);
^
Operation on an invalid type
      Error in /home/wzg/temporaryXX/jiabaologger20240301/BenanUtilities.Jiabao.TestTool.TestClient/node_modules/ng-zorro-antd/table/style/size.less (line 46, column 0)
    at tryRunOrWebpackError (/home/TestTool.TestClient/node_modules/webpack/lib/HookWebpackError.js:88:9)
    at __webpack_require_module__ (/home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:5058:12)
    at __webpack_require__ (/home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:5015:18)
    at /home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:5086:20
    at symbolIterator (/home/TestTool.TestClient/node_modules/neo-async/async.js:3485:9)
    at done (/home/TestTool.TestClient/node_modules/neo-async/async.js:3527:9)
    at Hook.eval [as callAsync] (eval at create (/home/TestTool.TestClient/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:15:1)
    at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/home/TestTool.TestClient/node_modules/tapable/lib/Hook.js:18:14)
    at /home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:4993:43
    at symbolIterator (/home/TestTool.TestClient/node_modules/neo-async/async.js:3482:9)
-- inner error --
Error: Module build failed (from ./node_modules/less-loader/dist/cjs.js):


// ================================================================
.table-size(~'middle', @table-padding-vertical-md, @table-padding-horizontal-md, @table-font-size-md);
^
Operation on an invalid type
      Error in /home/wzg/temporaryXX/jiabaologger20240301/BenanUtilities.Jiabao.TestTool.TestClient/node_modules/ng-zorro-antd/table/style/size.less (line 46, column 0)
    at Object.<anonymous> (/home/TestTool.TestClient/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[8].rules[0].oneOf[0].use[1]!/home/wzg/temporaryXX/jiabaologger20240301/BenanUtilities.Jiabao.TestTool.TestClient/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[8].rules[0].oneOf[0].use[2]!/home/wzg/temporaryXX/jiabaologger20240301/BenanUtilities.Jiabao.TestTool.TestClient/node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[8].rules[1].use[0]!/home/wzg/temporaryXX/jiabaologger20240301/BenanUtilities.Jiabao.TestTool.TestClient/src/styles.less:1:7)
    at /home/TestTool.TestClient/node_modules/webpack/lib/javascript/JavascriptModulesPlugin.js:441:11
    at Hook.eval [as call] (eval at create (/home/TestTool.TestClient/node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:7:1)
    at Hook.CALL_DELEGATE [as _call] (/home/TestTool.TestClient/node_modules/tapable/lib/Hook.js:14:14)
    at /home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:5060:39
    at tryRunOrWebpackError (/home/TestTool.TestClient/node_modules/webpack/lib/HookWebpackError.js:83:7)
    at __webpack_require_module__ (/home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:5058:12)
    at __webpack_require__ (/home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:5015:18)
    at /home/TestTool.TestClient/node_modules/webpack/lib/Compilation.js:5086:20
    at symbolIterator (/home/TestTool.TestClient/node_modules/neo-async/async.js:3485:9)

Generated code for /home/TestTool.TestClient/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[8].rules[0].oneOf[0].use[1]!/home/TestTool.TestClient/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[8].rules[0].oneOf[0].use[2]!/home/TestTool.TestClient/node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[8].rules[1].use[0]!/home/TestTool.TestClient/src/styles.less
1 | throw new Error("Module build failed (from ./node_modules/less-loader/dist/cjs.js):\n\n\n// ================================================================\n.table-size(~'middle', @table-padding-vertical-md, @table-padding-horizontal-md, @table-font-size-md);\n^\nOperation on an invalid type\n      Error in /home/TestTool.TestClient/node_modules/ng-zorro-antd/table/style/size.less (line 46, column 0)");


原因分析:

很明显,问题的出现是因为style.less这个文件,

@input-padding-vertical-base: max(round((@input-height-base - @font-size-base * @line-height-base) / 2 * 10) / 10 - @border-width-base,3px);

@input-padding-vertical-sm: max(round((@input-height-sm - @font-size-base * @line-height-base) / 2 * 10) / 10 - @border-width-base, 0);

@input-padding-vertical-lg: ceil((@input-height-lg - @font-size-lg * @line-height-base) / 2 * 10) / 10 - @border-width-base;

@select-multiple-item-spacing-half: ceil(@input-padding-vertical-base / 2);

@table-padding-vertical-md: @table-padding-vertical * 3 / 4;

@table-padding-horizontal-md: @table-padding-horizontal / 2;

@table-padding-vertical-sm: @table-padding-vertical / 2;

@table-padding-horizontal-sm: @table-padding-horizontal / 2;

经过进一步的判断,发现报错的是以上的8句代码;

经过读源代码,并与默认代码对比,终于发现了写法上的不同之处。

其实这几句都是同一问题,就是参数界定问题,涉及到运算的地方格外注意,less里面的代码并不能做到像js代码一样,比如cell(),这个方法里面的参数就必须是数字,而这个数字如果是涉及到计算,需将计算表达式放进“()”中,再将该“()”放进“cell()”中。


解决方案:

@input-padding-vertical-base: max(round(((@input-height-base - @font-size-base * @line-height-base) / 2 * 10)) / 10 - @border-width-base,3px);

@input-padding-vertical-sm: max(round(((@input-height-sm - @font-size-base * @line-height-base) / 2 * 10)) / 10 - @border-width-base, 0);

@input-padding-vertical-lg: ceil(((@input-height-lg - @font-size-lg * @line-height-base) / 2 * 10)) / 10 - @border-width-base;

@select-multiple-item-spacing-half: ceil((@input-padding-vertical-base / 2));

@table-padding-vertical-md: (@table-padding-vertical * 3 / 4);

@table-padding-horizontal-md: (@table-padding-horizontal / 2);

@table-padding-vertical-sm: (@table-padding-vertical / 2);

@table-padding-horizontal-sm:(@table-padding-horizontal / 2);

完美解决。

  • 35
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值