webpack 4-在生产模式下找不到/package.json

时间:2018-12-16 10:28:35

标签: webpack google-cloud-firestore webpack-4

我正在为一个简单的Web Express应用程序运行webpack4 当我在开发环境中运行服务器(通过nodemon)时,它运行得很好,但是当我进入生产环境时,却遇到了这个奇怪的错误(由firestore行生成)

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

我不知道为什么要在根(/)目录而不是dist目录中寻找package.json。

这是我的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

有什么想法我想念什么? 我在文档中看到了对解析器的引用,但是默认情况下,它正在寻找package.json,所以...

1 个答案:

答案 0 :(得分:-1)

该问题来自gRPC(firebase / firestore的依赖项)问题,该问题无法在Windows上的node-pre-gyp(其依赖项)中找到绑定。因此,与其像这样导入Firebase:

import firebase from 'firebase/app';

您需要通过创建App Shell使用如下脚本标签来导入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()不是一个函数。