我正试图使用github将我的node.js应用程序部署到heroku,但由于出现错误,构建一直被拒绝"webpack:找不到";。不确定我的脚本中还缺少什么。1( 我已经尝试将节点版本添加到我的package.json中。2( 我确实安装了webpack,并将其包含在我的开发依赖项中。3( 我添加了";heroku预构建":"npm install-dev";到我的脚本部分到package.json的根目录,但仍然没有运气。请参阅下面的构建日志:-
-----> Building on the Heroku-22 stack
-----> Determining which buildpack to use for this app
-----> Node.js app detected
-----> Creating runtime environment
NPM_CONFIG_LOGLEVEL=error
NODE_VERBOSE=false
NODE_ENV=production
NODE_MODULES_CACHE=true
-----> Installing binaries
engines.node (package.json): unspecified
engines.npm (package.json): unspecified (use default)
Resolving node version 16.x...
Downloading and installing node 16.17.0...
Using default npm version: 8.15.0
-----> Installing dependencies
Installing node modules
> JATE@1.0.0 install
> cd client && npm install
added 2 packages, and audited 3 packages in 14s
found 0 vulnerabilities
added 162 packages, and audited 163 packages in 22s
15 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
-----> Build
Running build
> JATE@1.0.0 build
> cd client && npm run build
> build
> webpack --mode production
/tmp/build-3dc3f907.sh: 1: webpack: not found
-----> Build failed
We're sorry this build is failing! You can troubleshoot common issues here:
https://devcenter.heroku.com/articles/troubleshooting-node-deploys
Some possible problems:
- Node version not specified in package.json
https://devcenter.heroku.com/articles/nodejs-support#specifying-a-node-js-version
Love,
Heroku
! Push rejected, failed to compile Node.js app.
! Push failed
请查看我的客户端文件夹的package.json
{
"name": "JATE",
"scripts": {
"dev": "webpack-dev-server",
"build": "webpack --mode production",
"start": "webpack --watch"
},
"author": "2U",
"license": "UNLICENSED",
"devDependencies": {
"@babel/core": "^7.15.0",
"@babel/plugin-transform-runtime": "^7.15.0",
"@babel/preset-env": "^7.15.0",
"@babel/runtime": "^7.15.3",
"babel-loader": "^8.2.2",
"css-loader": "^6.2.0",
"html-webpack-plugin": "^5.3.2",
"http-server": "^0.11.1",
"style-loader": "^3.2.1",
"webpack": "^5.51.1",
"webpack-cli": "^4.8.0",
"webpack-dev-server": "^4.0.0",
"webpack-pwa-manifest": "^4.3.0",
"workbox-webpack-plugin": "^6.2.4"
},
"dependencies": {
"code-mirror-themes": "^1.0.0",
"idb": "^6.1.2"
}
}
请查看我的根文件夹的package.json
{
"name": "JATE",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start:dev": "concurrently "cd server && npm run server" "cd client && npm run dev"",
"start": "npm run build && cd server && node server.js",
"server": "cd server nodemon server.js --ignore client",
"build": "cd client && npm run build",
"install": "cd client && npm install",
"client": "cd client && npm start"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"if-env": "^1.0.4"
},
"devDependencies": {
"concurrently": "^5.2.0",
"nodemon": "^2.0.4"
}
}
您正试图通过主package.json
:中的此脚本安装客户端依赖项
"install": "cd client && npm install",
但是,默认情况下,Heroku不运行npm install
:
Heroku使用锁定文件
package-lock.json
或yarn.lock
来安装预期的依赖关系树,因此请确保将这些文件检查到git中,以确保跨环境的依赖关系版本相同。如果您使用的是npm,Heroku将使用npm ci
来设置构建环境。
因此,您的install
脚本没有被调用。
您可以将Heroku配置为运行npm install
(见下文(,但在执行此操作之前,我建议您考虑其影响。npm ci
存在于这种用例中:
此命令类似于
npm install
,只是它用于自动化环境,如测试平台、连续集成和部署,或者任何需要确保对依赖项进行干净安装的情况。通过跳过某些面向用户的功能,它可以比常规的npm安装快得多。它也比常规安装更严格,这可以帮助捕获由大多数npm用户的增量安装本地环境引起的错误或不一致。简而言之,使用
npm install
和npm ci
的主要区别在于:
- 项目必须具有现有的
package-lock.json
或npm-shrinkwrap.json
- 如果包锁中的依赖项与
package.json
中的不匹配,则npm ci
将退出并返回错误,而不是更新包锁npm ci
一次只能安装整个项目:无法使用此命令添加单个依赖项- 如果
node_modules
已经存在,则在npm ci
开始安装之前,它将被自动删除- 它永远不会写入
package.json
或任何包锁:安装基本上是冻结的
要继续使用npm ci
,一个选项是让主build
脚本调用客户端文件夹中的npm ci
:
"build": "cd client && npm ci && npm run build",
如果在阅读完所有内容后仍然希望使用npm install
,请将USE_NPM_INSTALL
环境变量设置为true
:
heroku config:set USE_NPM_INSTALL=true
然后重新部署。