webpack 4 - не удается найти /package.json в производственном режиме - PullRequest
0 голосов
/ 16 декабря 2018

Я использую webpack4 для простого веб-экспресс-приложения. Когда я запускаю сервер в среде разработки (через nodemon), он работает отлично, но когда я запускаюсь в производство, я получаю эту странную ошибку (генерируется излиния пожарного депо)

Error: package.json does not exist at /package.json

Я не могу понять, почему он ищет файл package.json в корневом каталоге (/), а не в каталоге dist.

Это мой файл webpack.config.js:

// webpack.config.js

const path = require('path')
const webpack = require('webpack') // to access built-in plugins
// const nodeExternals = require('webpack-node-externals')
const CopyWebpackPlugin = require('copy-webpack-plugin')

const config = {
  mode: 'production',
  target: 'node',
  entry: './lib/index.js',
  // externals: [nodeExternals()], // in order to ignore all modules in node_modules folder
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: 'app.js',
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules)/,
        use: {
          loader: "babel-loader"
        }
      },
      {
        enforce: 'pre',
        test: /\.js$/,
        exclude: /(node_modules)/,
        loader: 'eslint-loader'
      },
      {
        test: /\.txt$/,
        exclude: /(node_modules)/,
        use: 'raw-loader'
      }
    ]
  },
  plugins: [
    new CopyWebpackPlugin([{ from: './lib/assets/lastest.txt' }, { from: './package.json' }]),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': '"production"'
    }),
  ]
}

module.exports = config

есть идеи, что мне не хватает?Я видел в документации ссылку на Resolvers, но по умолчанию он ищет package.json, так что ...

1 Ответ

0 голосов
/ 22 апреля 2019

Проблема возникает из-за проблемы с gRPC (зависимость от firebase / firestore), которая не может найти привязки из node-pre-gyp (это зависимость) в Windows.Поэтому вместо того, чтобы импортировать Firebase следующим образом:

import firebase from 'firebase/app';

, вам необходимо импортировать Firebase, создав в командной оболочке приложения теги сценария, подобные этому:

<script src="https://www.gstatic.com/firebasejs/5.10.0/firebase-app.js" />
<script src="https://www.gstatic.com/firebasejs/5.10.0/firebase-firestore.js" />

С этим обходным путем вы можете кэшировать этискрипты для браузера вашего пользователя.Однако это приведет к увеличению времени загрузки только при первом входе вашего пользователя на ваш сайт.Кроме того, сайт должен работать так же быстро (возможно, даже быстрее).Вам даже не нужно беспокоиться о создании внешнего API (если это не то, что вы хотели бы сделать).Чтобы получить доступ к вашей базе данных, вы можете сделать простой firebase.firestore()...get(), но убедитесь, что ваш пользователь установил Firebase в своем кеше, прежде чем пытаться сделать что-то подобное, иначе вы получите сообщение о том, что firebase.firestore() не является функцией.

...