webpack:找不到-在将我的应用程序部署到heroku时



我正试图使用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.jsonyarn.lock来安装预期的依赖关系树,因此请确保将这些文件检查到git中,以确保跨环境的依赖关系版本相同。如果您使用的是npm,Heroku将使用npm ci来设置构建环境。

因此,您的install脚本没有被调用。

您可以将Heroku配置为运行npm install(见下文(,但在执行此操作之前,我建议您考虑其影响。npm ci存在于这种用例中:

此命令类似于npm install,只是它用于自动化环境,如测试平台、连续集成和部署,或者任何需要确保对依赖项进行干净安装的情况。通过跳过某些面向用户的功能,它可以比常规的npm安装快得多。它也比常规安装更严格,这可以帮助捕获由大多数npm用户的增量安装本地环境引起的错误或不一致。

简而言之,使用npm installnpm ci的主要区别在于:

  • 项目必须具有现有的package-lock.jsonnpm-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

然后重新部署。

最新更新