11

我一直试图找到答案,但它似乎还没有出现。

我正在使用 React-Toolbox、React-Bootstrap 和一些自定义 scss。在我的本地机器上,构建工作正常。当我启动 AWS Ubuntu 服务器并进行基本节点生产设置时,我的图像构建失败。

我正在使用 Image-Webpack-Loader。我将它链接在文件加载器上。

这是我的生产 webpack 文件(对此的任何提示也非常感谢。永远学习)

let webpack = require('webpack');
let HtmlWebpackPlugin = require('html-webpack-plugin');
let ExtractTextPlugin = require('extract-text-webpack-plugin');
const path = require('path');
const autoprefixer = require('autoprefixer');
const modulesPath = path.join(__dirname, 'node_modules');

var HtmlWebpackPluginConfig = new HtmlWebpackPlugin({
  template: __dirname + '/app/index.html',
  filename: 'index.html',
  inject: 'body'
});

var WebpackEnvPlugin = new webpack.DefinePlugin({
  'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production'),
  PORT: JSON.stringify(process.env.PORT)
});

module.exports = {
  entry: [
  './app/index.js'
  ],
  output: {
    path: __dirname + '/dist',
    filename: 'index_bundle.js',
    publicPath: '/assets'
  },
  postcss: [autoprefixer],
  resolve: {
    extensions: ['', '.css', '.scss', '.js', '.json'],
  },
  module: {
    loaders: [
      {
        test: /(\.js)$/,
        exclude: /node_modules/,
        loaders: ['babel']
      },
      { test: /\.css$/,
        exclude : path.join(__dirname, '/node_modules/react-toolbox/'),
        loader: ExtractTextPlugin.extract("style-loader, css-loader!autoprefixer-loader") },
      {
        test: /\.scss$/,
        exclude : path.join(__dirname, '/node_modules/react-toolbox/'),
        loader: ExtractTextPlugin.extract("style-loader", "css-loader!autoprefixer-loader!sass-loader")
      },
      {
        test    : /(\.scss|\.css)$/,
        include : path.join(__dirname, '/node_modules/react-toolbox/'),
        loaders : [
          require.resolve('style-loader'),
          require.resolve('css-loader') + '?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]',
          require.resolve('sass-loader') + '?sourceMap'
        ]
      },
      {
        test: /\.(jpe?g|png|gif|svg)$/i,
        loaders: [
            'file?hash=sha512&digest=hex&name=[hash].[ext]',
            'image-webpack?bypassOnDebug&optimizationLevel=7&interlaced=false'
        ]
      }
    ]
  },
  plugins: [
  HtmlWebpackPluginConfig,
  WebpackEnvPlugin,
  new ExtractTextPlugin('css/main.css', {
            allChunks: true
        }),
  new webpack.optimize.OccurenceOrderPlugin(),
  new webpack.optimize.UglifyJsPlugin()
  ]
}

我已经通过降低 pngquant 的质量来阅读,这个问题可能会得到解决,但我没有这样的运气。

当我为不同的图像构建时,我会遇到这些错误:

ERROR in ./app/images/logo.png
Module build failed: Error: spawn /var/www/project/node_modules/pngquant-bin/vendor/pngquant ENOENT
    at exports._errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
 @ ./app/modules/listingpage/listingpage-component.js 55:11-43

我将main.scss文件包含在我的index.js.

ERROR in ./app/stylesheets/scss/main.scss
Module build failed: ModuleBuildError: Module build failed: Error: spawn /var/www/project/node_modules/pngquant-bin/vendor/pngquant ENOENT
    at exports._errnoException (util.js:1022:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
    at onErrorNT (internal/child_process.js:359:16)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
    at DependenciesBlock.onModuleBuildFailed (/var/www/project/node_modules/webpack-core/lib/NormalModuleMixin.js:315:19)
    at nextLoader (/var/www/project/node_modules/webpack-core/lib/NormalModuleMixin.js:270:31)
    at /var/www/project/node_modules/webpack-core/lib/NormalModuleMixin.js:292:15
    at context.callback (/var/www/project/node_modules/webpack-core/lib/NormalModuleMixin.js:148:14)
    at imagemin.buffer.then.catch.err (/var/www/project/node_modules/image-webpack-loader/index.js:42:9)
 @ ./app/index.js 30:0-39

还有一个我认为与装载机有关的错误:

ERROR in ./app/images/magnifying-glass.png
    Module build failed: Error: spawn /var/www/project/node_modules/pngquant-bin/vendor/pngquant ENOENT
        at exports._errnoException (util.js:1022:11)
        at Process.ChildProcess._handle.onexit (internal/child_process.js:193:32)
        at onErrorNT (internal/child_process.js:359:16)
        at _combinedTickCallback (internal/process/next_tick.js:74:11)
        at process._tickCallback (internal/process/next_tick.js:98:9)
     @ ./~/css-loader!./~/autoprefixer-loader!./~/sass-loader!./app/stylesheets/scss/main.scss 6:6846-6890

我使用以下格式包含我的图像:

const logo =  require('../../images/logo.png');

最后,这是我的 package.json 依赖项:

  "dependencies": {
    "async": "^2.0.1",
    "autoprefixer": "^6.5.1",
    "autoprefixer-loader": "^3.2.0",
    "axios": "^0.14.0",
    "babel-cli": "^6.16.0",
    "babel-core": "^6.16.0",
    "babel-loader": "^6.2.5",
    "babel-plugin-syntax-object-rest-spread": "^6.13.0",
    "babel-plugin-transform-class-properties": "^6.16.0",
    "babel-plugin-transform-object-rest-spread": "^6.16.0",
    "babel-plugin-transform-runtime": "^6.15.0",
    "babel-polyfill": "^6.16.0",
    "babel-preset-es2015": "^6.16.0",
    "babel-preset-react": "^6.16.0",
    "babel-preset-stage-0": "^6.16.0",
    "babel-register": "^6.16.3",
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "^1.15.2",
    "bootstrap": "^3.3.7",
    "classnames": "^2.2.5",
    "compression": "^1.6.2",
    "cookie-parser": "^1.4.3",
    "css-loader": "^0.25.0",
    "csv": "^1.1.0",
    "dotenv": "^2.0.0",
    "express": "^4.14.0",
    "express-flash": "0.0.2",
    "express-session": "^1.14.1",
    "file-loader": "^0.9.0",
    "glob": "^7.1.0",
    "html-webpack-plugin": "^2.22.0",
    "image-webpack-loader": "^2.0.0",
    "immutability-helper": "^2.0.0",
    "jquery": "^3.1.1",
    "jwt-simple": "^0.5.0",
    "later": "^1.2.0",
    "lodash": "^4.16.3",
    "moment": "^2.15.1",
    "mongoose": "^4.6.1",
    "morgan": "^1.7.0",
    "multer": "^1.2.0",
    "nodemon": "^1.11.0",
    "postcss-loader": "^0.13.0",
    "raw-loader": "^0.5.1",
    "react": "^15.4.1",
    "react-addons-css-transition-group": "^15.3.2",
    "react-bootstrap": "^0.30.5",
    "react-dom": "^15.3.2",
    "react-redux": "^4.4.5",
    "react-router": "^2.8.1",
    "react-router-bootstrap": "^0.23.1",
    "react-test-renderer": "^15.4.1",
    "react-toolbox": "^1.2.3",
    "redbox-react": "^1.3.1",
    "redux": "^3.6.0",
    "redux-logger": "^2.6.1",
    "redux-thunk": "^2.1.0",
    "request": "^2.75.0",
    "rimraf": "^2.5.4",
    "style-loader": "^0.13.1",
    "webpack": "^1.13.2",
    "webpack-dev-middleware": "^1.8.3",
    "webpack-hot-middleware": "^2.12.2"
  },
  "devDependencies": {
    "babel-eslint": "^7.0.0",
    "babel-jest": "^15.0.0",
    "babel-preset-es2015": "^6.16.0",
    "chai": "^3.5.0",
    "css-loader": "^0.25.0",
    "eslint": "^3.12.2",
    "eslint-config-airbnb": "^13.0.0",
    "eslint-plugin-import": "^2.2.0",
    "eslint-plugin-jsx-a11y": "^2.2.2",
    "eslint-plugin-react": "^6.3.0",
    "extract-text-webpack-plugin": "^1.0.1",
    "file-loader": "^0.9.0",
    "image-webpack-loader": "^2.0.0",
    "jest": "^15.1.1",
    "jest-cli": "^15.1.1",
    "json-loader": "^0.5.4",
    "mocha": "^3.1.0",
    "node-sass": "^3.10.1",
    "raw-loader": "^0.5.1",
    "react-addons-test-utils": "^15.3.2",
    "redbox-react": "^1.3.1",
    "redux-logger": "^2.6.1",
    "sass-loader": "^4.0.2",
    "toolbox-loader": "0.0.3",
    "url-loader": "^0.5.7",
    "webpack-dev-server": "^1.16.1"
  }

我试过重新安装我的包,只是重新安装 Image-Webpack-Loader,所有基本的事情。再一次,在本地构建良好,不在服务器上构建。我只是不确定我在这一点上做错了什么。在此先感谢您的帮助!

4

6 回答 6

9

正如 Rohn John 所说,我在我的机器上安装pngquantoptipng解决了问题

sudo apt-get install pngquant optipng
mkdir -p node_modules/pngquant-bin/vendor/
mkdir -p node_modules/optipng-bin/vendor/
ln -s /usr/bin/pngquant node_modules/pngquant-bin/vendor/pngquant
ln -s /usr/bin/optipng node_modules/optipng-bin/vendor/optipng

我测试了 useyarn可以做同样的事情并且更容易:

yarn add pngquant
yarn add optipng
yarn add cjpeg
于 2017-07-28T07:26:43.570 回答
8

图像加载器依赖于pngquant二进制。

pngquant-bin安装 npm 模块后pngquant,它使用g++makebash和.zlib-devlibpng-dev

不幸的是,错误消息不够清晰,您只会收到一个无益的消息。

npm install确保在或之前运行以下命令yarn install

apk --no-cache update \ 
&& apk --no-cache add make bash g++ zlib-dev libpng-dev \
&&  rm -fr /var/cache/apk/*

您可以将安装g++ zlib-dev替换为build-base

于 2018-04-16T12:14:48.770 回答
3

似乎 pngquant 安装遇到了一些问题。错误消息 “Module build failed: Error: spawn /var/www/project/node_modules/pngquant-bin/vendor/pngquant ENOENT” 表示在 node_modules/pngquant-bin/vendor/ 中找不到 pngquant。

您可以尝试重新安装 pngquant 或其他一些依赖于 pngquant 的 npm 包。

此外,您应该检查您的 Ubuntu 服务器是否安装了 pngquant。

于 2017-01-12T08:35:59.417 回答
2

Alpine linux 的 pngquant 有问题,看看这个

https://github.com/imagemin/pngquant-bin/issues/65

一种解决方案是在安装 npm/yarn 之前通过从源代码(如https://git.alpinelinux.org/cgit/aports/tree/community/pngquant/APKBUILD )安装它来链接 pngquant ,但这听起来工作量太大给我一个包裹。

我遇到了同样的问题,最终放弃了高山。我现在正在为节点使用标准 docker 映像。

于 2017-08-18T21:43:31.500 回答
0

在对 node 和 npm 进行一些更新后出现了同样的问题。尽管更新后一切正常,但由于显示您提到的消息而崩溃。经过大量搜索后,我找不到另一个答案,因此我删除了 node_modules 文件夹并从头开始安装所有内容。有效...

于 2017-09-22T19:52:47.847 回答
0

在没有为 pngquant 正确创建 node_modules 的 rails capistrano 部署中遇到了这个问题。在那里找不到该命令。

最后用 capistrano 再次进行部署。

于 2017-02-25T07:17:05.493 回答