【问题标题】:How to keep webpack from bundling a package?如何防止 webpack 捆绑包?
【发布时间】:2016-04-09 15:42:04
【问题描述】:

我在我的 webpack 项目中使用 Postgres 和 Sequelize。我遇到了一个错误列表,其中似乎 webpack 正在尝试捆绑 sequelize 或 postgres (pg) 包:

ERROR in ./~/pg/lib/connection.js
Module not found: Error: Cannot resolve module 'net' in /Users/dace/Code/personal/my_project/node_modules/pg/lib
 @ ./~/pg/lib/connection.js 1:10-24

ERROR in ./~/pg/lib/connection.js
Module not found: Error: Cannot resolve module 'tls' in /Users/dace/Code/personal/my_project/node_modules/pg/lib
 @ ./~/pg/lib/connection.js 78:14-28

ERROR in ./~/pg/lib/native/index.js
Module not found: Error: Cannot resolve module 'pg-native' in /Users/dace/Code/personal/my_project/node_modules/pg/lib/native
 @ ./~/pg/lib/native/index.js 1:13-33

ERROR in ./~/pg/lib/connection-parameters.js
Module not found: Error: Cannot resolve module 'dns' in /Users/dace/Code/personal/my_project/node_modules/pg/lib
 @ ./~/pg/lib/connection-parameters.js 2:10-24

ERROR in ./~/pgpass/lib/index.js
Module not found: Error: Cannot resolve module 'fs' in /Users/dace/Code/personal/my_project/node_modules/pgpass/lib
 @ ./~/pgpass/lib/index.js 4:9-22

在我的 webpack 的 dev.config.js 文件中,我有:

var path = require('path');

module.exports = {
  entry: path.join(__dirname, '..', 'src', 'index.js'),
  output: {
    publicPath: '/build/',
    path: path.join(__dirname, '..', 'dist', 'build'),
    filename: 'bundle.js',
  },
  module: {
    loaders: [
      {
        test: /\.js?$/,
        exclude: /node_modules/,
        loader: ['babel'],
        query: {
          presets: ['react', 'es2015'],
        },
      },
    ],
  },
};

然后在我的 index.js 中我有:

var Sequelize = require('sequelize');

var connection = new Sequelize('dev', 'dace', 'root', {
  dialect: 'postgres',
});

var Article = connection.define('article', {
  name: Sequelize.STRING,
})

connection.sync().then(function() {
  Article.create({
    name: 'Dace'
  });
});

我猜测当我从项目中完全删除 webpack 时,我需要阻止 webpack 尝试捆绑 sequelize 或 pg。有没有办法可以配置 webpack 以忽略在我的应用中捆绑这些包?

谢谢!

【问题讨论】:

  • index.js 加载时,您希望客户端会发生什么?
  • 我最终会用 React 查询并显示数据,但现在只是试图让它连接并插入这一条目。
  • 你想在服务器端运行index.js还是只在客户端运行?
  • 是的,在服务器和客户端都可以。

标签: webpack sequelize.js


【解决方案1】:

您不应该使用客户端代码中处理数据库、文件系统等的任何内容。例如fs 模块(即filesystem)是仅在node 环境中定义的东西,浏览器没有任何线索,fs 可能是什么。 net 也是如此(在浏览器中实现不同或根本没有实现)。难怪webpack 对此感到困惑:)

我的建议:将代码重写为客户端、服务器和公共部分;确保客户端和服务器部分只做在节点/浏览器环境中有意义的事情。

【讨论】:

  • 谢谢托马斯。这开始变得更有意义了。在客户端,用户最终将能够获取/发布/放置/删除 - 所以所有这些都应该在我的 server.js(带有我的 express 配置的文件)中处理,对吗?
  • 酷。那你能接受答案吗?此外,ESTE 是一个不错的而且绝对值得关注 nodejs 同构应用程序的入门工具包,您还可以注意到服务器、客户端、通用和反应本机代码的区别:github.com/este/este
猜你喜欢
  • 2017-09-08
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 2016-09-18
  • 2019-08-21
相关资源
最近更新 更多