[已解决]Linux下构建 uniapp h5/web 应用问题

执行npm install && npm run build:h5-dev过程报错问题,记录分享
最终成功构建。

一、找不到 node-sass-china 、 less 模块

⠹  开始编译当前项目至 h5 平台...

 ERROR  Failed to compile with 2 errors                                                                                        15:21:24

 error  in /opt/frontend/h5/App.vue?vue&type=style&index=1&lang=scss&

Syntax Error: Error: Cannot find module '/usr/local/compile-node-sass/node_modules/node-sass-china'

Syntax Error: Error: Cannot find module '/usr/local/compile-node-sass/node_modules/node-sass-china'
Require stack:
- /usr/local/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/sass-loader/dist/getDefaultSassImplementation.js
...
...
...
 error  in /opt/frontend/h5/pages/question/question.vue?vue&type=style&index=0&id=315c7946&lang=less&scoped=true&

Syntax Error: Error: Cannot find module '/usr/local/compile-less/node_modules/less'
Require stack:
- /usr/local/uniapp-cli/node_modules/less-loader/dist/index.js
...
...

首先检查版本号是否对应
在这里插入图片描述

解决方案1:

  1. 检查项目中是否已安装node-sass-china
[root@ h5]# npm ls node-sass-china
sass@0.0.1-2019021317 /opt/frontend/h5
└── node-sass-china@4.7.2

将node_modules中的node-sass文件夹内容拷贝到目标目录

cp -r node_modules/node-sass/* /usr/local/compile-node-sass/node_modules/node-sass-china
  1. 检查项目中是否已安装 less
[root@ h5]# npm ls less
xxxx@1.0.0 /opt/frontend/h5
└── less@4.1.3

将node_modules中的less文件夹内容拷贝到目标目录

cp -r node_modules/node-sass/* /usr/local/compile-less/node_modules/less

解决方案2:

参考文章 https://ask.dcloud.net.cn/article/35468
下载文章中compile-node-sass.zip安装包(需要登录dcloud账号,浏览器打开直接下载) https://ask.dcloud.net.cn/file/download/file_name-Y29tcGlsZS1ub2RlLXNhc3Muemlw__url-Ly9hc2suZGNsb3VkLm5ldC5jbi91cGxvYWRzL2FydGljbGUvMjAxOTAyMTQvZmIyZTFkYjdjODI1ZWQ0ZjZjMWU5ODM1Zjg1YWZjNGI=
解压到目标文件夹 /usr/local/compile-node-sass

二、错误binding.node缺失

[root@node180 h5]# npm run build:h5-dev

> answer@1.0.0 build:h5-dev
> INIT_CWD=`pwd` && cd /usr/local/uniapp-cli && cross-env UNI_INPUT_DIR=$INIT_CWD/ UNI_OUTPUT_DIR=$INIT_CWD/unpackage/dist/build/h5 UNI_PLATFORM=h5 NODE_ENV=dev node /usr/local/uniapp-cli/bin/uniapp-cli.js

请注意运行模式下,因日志输出、sourcemap以及未压缩源码等原因,性能和包体积,均不及发行模式。

⠏  开始编译当前项目至 h5 平台...--> LibSass 的二进制文件(/usr/local/compile-node-sass/node_modules/node-sass-china/vendor/linux-x64-93/binding.node)缺失,请执行下面3条命令下载对应版本的二进制文件:(有可能引发此错误的原因是 Node 版本变更)
  mkdir -p /usr/local/compile-node-sass/node_modules/node-sass-china/vendor/linux-x64-93
  cd /usr/local/compile-node-sass/node_modules/node-sass-china/vendor/linux-x64-93
  curl -o binding.node http://cdn.npm.taobao.org/dist/node-sass/v4.7.2/linux-x64-93_binding.node
--> MacOS 、Unix/Linux 请根据权限使用 sudo

按照要求执行三句命令后报错

 ERROR  Failed to compile with 1 error                                                                        12:05:56

 error  in /opt/frontend/h5/App.vue?vue&type=style&index=1&lang=scss&

Syntax Error: Error: /usr/local/compile-node-sass/node_modules/node-sass-china/vendor/linux-x64-93/binding.node: invalid ELF header

发现下载后的 binding.node 文件内容为空,说明这个URL路径无效。
查看本地安装node-sass版本号

[root@ h5]# npm ls node-sass
xxxx@1.0.0 /opt/frontend/h5
└── node-sass@6.0.1

找到对应版本号的文件并下载到对应文件夹
curl -o binding.node https://registry.npmmirror.com/binary.html?path=node-sass/v6.0.1/linux-x64-93_binding.node

在这里插入图片描述

三、错误make: g++: Command not found

make: g++: Command not found
make: *** [Release/obj.target/libsass/src/libsass/src/ast.o] Error 127
make: Leaving directory `/usr/local/uniapp-cli/node_modules/.store/node-sass-china@4.13.1/node_modules/node-sass-china/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/uniapp-cli/node_modules/.store/node-gyp@3.8.0/node_modules/node-gyp/lib/build.js:262:23)

安装 gcc、g++、make工具

yum -y install gcc gcc-c++ kernel-devel && yum -y install make

四、错误g++: 错误:unrecognized command line option ‘-std=gnu++14’

[2/3] Installing true-case-path@^1.0.2
g++: 错误:unrecognized command line option ‘-std=gnu++14’
make: *** [Release/obj.target/libsass/src/libsass/src/ast.o] 错误 1
make: 离开目录“/usr/local/uniapp-cli/node_modules/.store/node-sass-china@4.13.1/node_modules/node-sass-china/build”
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/uniapp-cli/node_modules/.store/node-gyp@3.8.0/node_modules/node-gyp/lib/build.js:262:23)

查看g++版本过低,-std=c++14需要g++5.2以上,而centos默认的g++只有4.8.5

[root@ uniapp-cli]# g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
  1. 安装scl工具(解决检索不到devtool高版本问题)
    按顺序安装centos-release-scl-rh 、centos-release-scl
yum -y install centos-release-scl-rh && yum -y install centos-release-scl

输入scl,可以看到输出:“Need at least 3 arguments.Run scl --help to get help.”说明scl被装好了。
  1. 增加安装devtool版本
    yum search gcc或者yum list |grep gcc 看是否有devtoolset-7-gcc、devtoolset-7-gcc-c++.x86_64 等依赖包可供选择.
    选择安装devtoolset-7-gcc-c++.x86_64以及devtoolset-7-gcc.x86_64
    命令行输入: scl enable devtoolset-7 bash即可切换GCC至7.3.1版本

检查安装结果

[root@ frontend]# g++ --version
g++ (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)
Copyright (C) 2017 Free Software Foundation, Inc

另:安装uniapp-cli,参考原文链接

在windows的系统上打开HBuilderX的安装目录
然后进入plugins/uniapp-cli(我的路径是D:\Program Files\HBuilderX\plugins\uniapp-cli)目录,将该文件下的文件拷贝到Linux主机上 (不需要拷贝node_modules目录和package-lock.json文件)
然后在Linux上打开uniapp-cli的目录执行cnpm install,耐心等待安装完成

如有需要可以安装下less和node-sass-china,命令 cnpm install bcrypt less node-sass-china --save,其中安装node-sass-china需要编译(需要安装make,gcc,g++等)耗时比较久,如果安装过程中出现下载错误则执行以下命令

Copymkdir -p /var/tools/uniapp-cli/node_modules/_node-sass-china@4.13.1@node-sass-china/vendor/linux-x64-83
cd /var/tools/uniapp-cli/node_modules/_node-sass-china@4.13.1@node-sass-china/vendor/linux-x64-83
curl -o binding.node http://cdn.npm.taobao.org/dist/node-sass/v4.13.1/linux-x64-83_binding.node

如果出现以下错误Binary has a problem: Error: /var/tools/uniapp-cli/node_modules/_node-sass-china@4.13.1@node-sass-china/vendor/linux-x64-83/binding.node: invalid ELF header则需要安装apt install python-snappy(ubuntu,debian)或者cnpm install bcrypt --save(centos),bcrypt 安装到uniapp-cli下,如果还是不可以,删除 node_modules 之后多尝试看看直至成功。

此时还需要注意,如果报错Syntax Error: Error: Cannot find module '/var/tools/compile-node-sass/node_modules/node-sass-china' 还需要构建两个软连接

Copyln -s /var/tools/uniapp-cli/ /var/tools/compile-node-sass
ln -s /var/tools/uniapp-cli/ /var/tools/compile-less

参考

Linux下构建 uniapp h5 应用(非命令行创建项目)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值