Node.JS:尝试 运行 docker 项目 docker-compose up 由于 node-sass 和 node-gyp
Node.JS: Trying to run docker project with docker-compose up exits due to node-sass and node-gyp
我正在尝试从 MacBook Air M1 运行 我的 Docker 工作项目之一,但在执行 docker-compose up
时出现以下错误。显然 它找不到 python 安装 ,即使我可以从终端执行 python --version
和 python3 --version
。我是 Docker 的新手,但我尝试对所有可能的问题进行故障排除以解决此错误
#8 91.79 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
#8 91.79 error /app/node_modules/node-sass: Command failed.
#8 91.79 Exit code: 1
#8 91.79 Command: node scripts/build.js
#8 91.79 Arguments:
#8 91.79 Directory: /app/node_modules/node-sass
#8 91.79 Output:
#8 91.79 Building: /usr/local/bin/node /app/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
#8 91.79 gyp info it worked if it ends with ok
#8 91.79 gyp verb cli [
#8 91.79 gyp verb cli '/usr/local/bin/node',
#8 91.79 gyp verb cli '/app/node_modules/node-gyp/bin/node-gyp.js',
#8 91.79 gyp verb cli 'rebuild',
#8 91.79 gyp verb cli '--verbose',
#8 91.79 gyp verb cli '--libsass_ext=',
#8 91.79 gyp verb cli '--libsass_cflags=',
#8 91.79 gyp verb cli '--libsass_ldflags=',
#8 91.79 gyp verb cli '--libsass_library='
#8 91.79 gyp verb cli ]
#8 91.79 gyp info using node-gyp@7.1.2
#8 91.79 gyp info using node@16.13.0 | linux | arm64
#8 91.79 gyp verb command rebuild []
#8 91.79 gyp verb command clean []
#8 91.79 gyp verb clean removing "build" directory
#8 91.79 gyp verb command configure []
#8 91.79 gyp verb find Python Python is not set from command line or npm configuration
#8 91.79 gyp verb find Python Python is not set from environment variable PYTHON
#8 91.79 gyp verb find Python checking if "python3" can be used
#8 91.79 gyp verb find Python - executing "python3" to get executable path
#8 91.79 gyp verb find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python" can be used
#8 91.79 gyp verb find Python - executing "python" to get executable path
#8 91.79 gyp verb find Python - "python" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python2" can be used
#8 91.79 gyp verb find Python - executing "python2" to get executable path
#8 91.79 gyp verb find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! find Python Python is not set from command line or npm configuration
#8 91.79 gyp ERR! find Python Python is not set from environment variable PYTHON
#8 91.79 gyp ERR! find Python checking if "python3" can be used
#8 91.79 gyp ERR! find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python" can be used
#8 91.79 gyp ERR! find Python - "python" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python2" can be used
#8 91.79 gyp ERR! find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python You need to install the latest version of Python.
#8 91.79 gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
#8 91.79 gyp ERR! find Python you can try one of the following options:
#8 91.79 gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python (accepted by both node-gyp and npm)
#8 91.79 gyp ERR! find Python - Set the environment variable PYTHON
#8 91.79 gyp ERR! find Python - Set the npm configuration variable python:
#8 91.79 gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python For more information consult the documentation at:
#8 91.79 gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! configure error
#8 91.79 gyp ERR! stack Error: Could not find any Python installation to use
#8 91.79 gyp ERR! stack at PythonFinder.fail (/app/node_modules/node-gyp/lib/find-python.js:302:47)
#8 91.79 gyp ERR! stack at PythonFinder.runChecks (/app/node_modules/node-gyp/lib/find-python.js:136:21)
#8 91.79 gyp ERR! stack at PythonFinder.<anonymous> (/app/node_modules/node-gyp/lib/find-python.js:179:16)
#8 91.79 gyp ERR! stack at PythonFinder.execFileCallback (/app/node_modules/node-gyp/lib/find-python.js:266:16)
#8 91.79 gyp ERR! stack at exithandler (node:child_process:404:5)
#8 91.79 gyp ERR! stack at ChildProcess.errorhandler (node:child_process:416:5)
#8 91.79 gyp ERR! stack at ChildProcess.emit (node:events:390:28)
#8 91.79 gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:288:12)
#8 91.79 gyp ERR! stack at onErrorNT (node:internal/child_process:477:16)
#8 91.79 gyp ERR! stack at processTicksAndRejections (node:internal/process/task_queues:83:21)
#8 91.79 gyp ERR! System Linux 5.10.47-linuxkit
#8 91.79 gyp ERR! command "/usr/local/bin/node" "/app/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
#8 91.79 gyp ERR! cwd /app/node_modules/node-sass
#8 91.79 gyp ERR! node -v v16.13.0
#8 91.79 gyp ERR! node-gyp -v v7.1.2
#8 91.79 gyp ERR! not ok
#8 91.79 Build failed with error code: 1
我尝试了错误提示的所有操作 - 设置 python 的路径变量,并尝试将 NPM 的配置设置为 python 的路径,但没有成功...
我也尝试将节点降级到 v16,因为节点-sass 6.0.1 与节点 v17 不兼容 according to the docs
我通过自制软件安装了 python 3.9.8,并且 运行ning which python3
输出 /opt/homebrew/bin/python3
node -v
: v16.13.0
npm -v
: v8.1.0
echo $PATH
: /Library/Frameworks/Python.framework/Versions/3.10/bin /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
npm config list
:
prefix = "/opt/homebrew"
; "global" config from /opt/homebrew/etc/npmrc
; python = "/opt/homebrew/opt/python@3.9/libexec/bin" ; overridden by user
; "user" config from /Users/**username**/.npmrc
python = "/opt/homebrew/opt/python@3.9/libexec/bin"
问题:
python 安装在您本地的 macbook 上,但不在 docker 容器内(这是一个独立的虚拟 os)。
解决方案
您需要将 python 安装在与 运行 安装 nodejs 脚本或 npm 命令的同一容器中。
在 dockerFile
中拉取 nodejs 镜像后尝试添加这个
RUN apt-get update || : && apt-get install python -y
这适用于 debian 或基于 debian 的 linux 发行版 ...(如果您有基于 debian 的官方 Node 映像,那么上一行应该在您拉取映像后立即正常工作 运行 你需要在同一个容器中安装 python。
简单的解决方案
npm uninstall node-sass
npm install sass -S -D
Node Sass to Dart Sass
Before v4.3.0, this project was built based on node-sass, but node-sass low-level dependencies libsass, resulting in many users installing Especially difficult for Windows users, it forces users to install python2 and Visual Studio in the windows environment to compile successfully.
So in order to solve this problem, this project was modified to build
dart-sass in v4.3.0, it can guarantee performance Under the premise of
greatly simplifying the user's installation costs. Through this issue
the relevant comments below can be known, install` Node-sass is such a
troublesome thing.
There is a more important reason for choosing to use dart-sass here.
Officially, sass has taken dart-sass as the main development direction
in the future. Any new features will be supported first, and it It has
been running steadily in the community for a long time, and there are
basically no pits. The main reason why dart-sass is easy to install is
because it will be compiled into pure js, so that it can be used
directly in the node environment. Although its running speed will be
slower than that based on libsass, the difference in these speeds is
almost negligible. The entire community is now embracing dart-sass,
and we have no reason to refuse! And it does greatly simplify the
user's installation costs.
Currently, vue-cli will also prefer to use dart-scss by default when
selecting sass preprocessing, related: pr
https://panjiachen.github.io/vue-element-admin-site/guide/advanced/sass.html#upgrade-plan
我正在尝试从 MacBook Air M1 运行 我的 Docker 工作项目之一,但在执行 docker-compose up
时出现以下错误。显然 它找不到 python 安装 ,即使我可以从终端执行 python --version
和 python3 --version
。我是 Docker 的新手,但我尝试对所有可能的问题进行故障排除以解决此错误
#8 91.79 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
#8 91.79 error /app/node_modules/node-sass: Command failed.
#8 91.79 Exit code: 1
#8 91.79 Command: node scripts/build.js
#8 91.79 Arguments:
#8 91.79 Directory: /app/node_modules/node-sass
#8 91.79 Output:
#8 91.79 Building: /usr/local/bin/node /app/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
#8 91.79 gyp info it worked if it ends with ok
#8 91.79 gyp verb cli [
#8 91.79 gyp verb cli '/usr/local/bin/node',
#8 91.79 gyp verb cli '/app/node_modules/node-gyp/bin/node-gyp.js',
#8 91.79 gyp verb cli 'rebuild',
#8 91.79 gyp verb cli '--verbose',
#8 91.79 gyp verb cli '--libsass_ext=',
#8 91.79 gyp verb cli '--libsass_cflags=',
#8 91.79 gyp verb cli '--libsass_ldflags=',
#8 91.79 gyp verb cli '--libsass_library='
#8 91.79 gyp verb cli ]
#8 91.79 gyp info using node-gyp@7.1.2
#8 91.79 gyp info using node@16.13.0 | linux | arm64
#8 91.79 gyp verb command rebuild []
#8 91.79 gyp verb command clean []
#8 91.79 gyp verb clean removing "build" directory
#8 91.79 gyp verb command configure []
#8 91.79 gyp verb find Python Python is not set from command line or npm configuration
#8 91.79 gyp verb find Python Python is not set from environment variable PYTHON
#8 91.79 gyp verb find Python checking if "python3" can be used
#8 91.79 gyp verb find Python - executing "python3" to get executable path
#8 91.79 gyp verb find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python" can be used
#8 91.79 gyp verb find Python - executing "python" to get executable path
#8 91.79 gyp verb find Python - "python" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python2" can be used
#8 91.79 gyp verb find Python - executing "python2" to get executable path
#8 91.79 gyp verb find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! find Python Python is not set from command line or npm configuration
#8 91.79 gyp ERR! find Python Python is not set from environment variable PYTHON
#8 91.79 gyp ERR! find Python checking if "python3" can be used
#8 91.79 gyp ERR! find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python" can be used
#8 91.79 gyp ERR! find Python - "python" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python2" can be used
#8 91.79 gyp ERR! find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python You need to install the latest version of Python.
#8 91.79 gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
#8 91.79 gyp ERR! find Python you can try one of the following options:
#8 91.79 gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python (accepted by both node-gyp and npm)
#8 91.79 gyp ERR! find Python - Set the environment variable PYTHON
#8 91.79 gyp ERR! find Python - Set the npm configuration variable python:
#8 91.79 gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python For more information consult the documentation at:
#8 91.79 gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! configure error
#8 91.79 gyp ERR! stack Error: Could not find any Python installation to use
#8 91.79 gyp ERR! stack at PythonFinder.fail (/app/node_modules/node-gyp/lib/find-python.js:302:47)
#8 91.79 gyp ERR! stack at PythonFinder.runChecks (/app/node_modules/node-gyp/lib/find-python.js:136:21)
#8 91.79 gyp ERR! stack at PythonFinder.<anonymous> (/app/node_modules/node-gyp/lib/find-python.js:179:16)
#8 91.79 gyp ERR! stack at PythonFinder.execFileCallback (/app/node_modules/node-gyp/lib/find-python.js:266:16)
#8 91.79 gyp ERR! stack at exithandler (node:child_process:404:5)
#8 91.79 gyp ERR! stack at ChildProcess.errorhandler (node:child_process:416:5)
#8 91.79 gyp ERR! stack at ChildProcess.emit (node:events:390:28)
#8 91.79 gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:288:12)
#8 91.79 gyp ERR! stack at onErrorNT (node:internal/child_process:477:16)
#8 91.79 gyp ERR! stack at processTicksAndRejections (node:internal/process/task_queues:83:21)
#8 91.79 gyp ERR! System Linux 5.10.47-linuxkit
#8 91.79 gyp ERR! command "/usr/local/bin/node" "/app/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
#8 91.79 gyp ERR! cwd /app/node_modules/node-sass
#8 91.79 gyp ERR! node -v v16.13.0
#8 91.79 gyp ERR! node-gyp -v v7.1.2
#8 91.79 gyp ERR! not ok
#8 91.79 Build failed with error code: 1
我尝试了错误提示的所有操作 - 设置 python 的路径变量,并尝试将 NPM 的配置设置为 python 的路径,但没有成功...
我也尝试将节点降级到 v16,因为节点-sass 6.0.1 与节点 v17 不兼容 according to the docs
我通过自制软件安装了 python 3.9.8,并且 运行ning which python3
输出 /opt/homebrew/bin/python3
node -v
: v16.13.0
npm -v
: v8.1.0
echo $PATH
: /Library/Frameworks/Python.framework/Versions/3.10/bin /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
npm config list
:
prefix = "/opt/homebrew"
; "global" config from /opt/homebrew/etc/npmrc
; python = "/opt/homebrew/opt/python@3.9/libexec/bin" ; overridden by user
; "user" config from /Users/**username**/.npmrc
python = "/opt/homebrew/opt/python@3.9/libexec/bin"
问题:
python 安装在您本地的 macbook 上,但不在 docker 容器内(这是一个独立的虚拟 os)。
解决方案
您需要将 python 安装在与 运行 安装 nodejs 脚本或 npm 命令的同一容器中。
在 dockerFile
中拉取 nodejs 镜像后尝试添加这个RUN apt-get update || : && apt-get install python -y
这适用于 debian 或基于 debian 的 linux 发行版 ...(如果您有基于 debian 的官方 Node 映像,那么上一行应该在您拉取映像后立即正常工作 运行 你需要在同一个容器中安装 python。
简单的解决方案
npm uninstall node-sass
npm install sass -S -D
Node Sass to Dart Sass Before v4.3.0, this project was built based on node-sass, but node-sass low-level dependencies libsass, resulting in many users installing Especially difficult for Windows users, it forces users to install python2 and Visual Studio in the windows environment to compile successfully.
So in order to solve this problem, this project was modified to build dart-sass in v4.3.0, it can guarantee performance Under the premise of greatly simplifying the user's installation costs. Through this issue the relevant comments below can be known, install` Node-sass is such a troublesome thing.
There is a more important reason for choosing to use dart-sass here. Officially, sass has taken dart-sass as the main development direction in the future. Any new features will be supported first, and it It has been running steadily in the community for a long time, and there are basically no pits. The main reason why dart-sass is easy to install is because it will be compiled into pure js, so that it can be used directly in the node environment. Although its running speed will be slower than that based on libsass, the difference in these speeds is almost negligible. The entire community is now embracing dart-sass, and we have no reason to refuse! And it does greatly simplify the user's installation costs.
Currently, vue-cli will also prefer to use dart-scss by default when selecting sass preprocessing, related: pr
https://panjiachen.github.io/vue-element-admin-site/guide/advanced/sass.html#upgrade-plan