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

jm2pwxwz  于 7个月前  发布在  Webpack
关注(0)|答案(2)|浏览(84)

我正在为一个简单的web express应用程序运行webpack 4当我在开发环境中运行服务器时(通过nodemon),它运行得很完美,但当我进入生产环境时,我得到了这个奇怪的错误(由firestore行生成)
第一个月
我不明白为什么它在根目录(/)而不是dist目录中查找package.json。
这是我的webpack.js.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,所以.

ttvkxqim

ttvkxqim1#

刚刚解决了一个类似的问题:

**One.**在webpack.config.js中设置别名,如下所示:

...
resolve: {
  extensions: ['.js', '.json'],
  modules: ['node_modules'],
  alias: {
    "@/routes": path.resolve(__dirname, "routes"),
}

字符串

**二.**通知TS/JS编译器模块别名,例如jsconfig.json

"paths": {
  "@/*": ["./*"]
}

**(可选)**不使用require('module-alias/register')?这在Webpack v5中不起作用。相反,手动挂钩到module-alias

const moduleAlias = require('module-alias')
moduleAlias.addAliases({
     "@": __dirname
})


请让我知道它是如何去为你。

nwnhqdif

nwnhqdif2#

这个问题来自于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()不是一个函数。

相关问题