首页 文章

在尝试使用webpack使用mongoose时获取大量的神秘错误和警告

提问于
浏览
8

我正在使用webpack将es6 isomorphic react应用程序分别编译到客户端和服务器包中 . 我已经安装了mongoose并试图在我的应用程序的服务器部分使用它,但是当我尝试构建时,我在控制台中遇到了一些可怕的错误:

警告./~/mongoose/lib/drivers/index.js严重依赖:8:11-74依赖的请求是表达式@ ./~/mongoose/lib/drivers/index.js 8:11-警告在./~/mongoose/lib/drivers/SPEC.md中模块解析失败:/Users/richie/Code/CreativeFlumeProjects/cf-website/node_modules/mongoose/lib/drivers/SPEC.md第2行:意外的令牌ILLEGAL您可能需要适当的加载程序来处理此文件类型 . | | #Driver Spec | | TODO @ ./~/mongoose/lib/drivers ^ . / . * $ WARNING in ./~/express/lib/view.js关键依赖关系:78:29-56依赖的请求是表达式@ ./~ /express/lib/view.js 78:29-56警告在./~/es6-promise/dist/es6-promise.js找不到模块:错误:无法解析/ Users / richie / Code /中的模块'vertx' CreativeFlumeProjects / cf-website / node_modules / es6-promise / dist解析/ Users / richie / Code / CreativeFlumeProjects / cf-website / node_modules / es6-promise / dist中的模块vertx查找/ Users / richie / Code / CreativeFlumeProjects /中的模块cf-website / src / Users / richie / Code / CreativeFlumeProjects / cf-website / src / vertx不存在(模块作为目录)解析/ Users / richie / Code / CreativeFlumeProjects / cf-website / src中的'文件'vertx解析文件/ Users / richie / Code / CreativeFlumeProjects / cf-website / src / vertx不存在/Users/richie/Code/CreativeFlumeProjects/cf-website/src/vertx.js不存在在/ Users中寻找模块/ richie / Code / CreativeFlumeProjects / cf-website / node_modules / Users / r ichie / Code / CreativeFlumeProjects / cf-website / node_modules / vertx不存在(模块作为目录)在/ Users / richie / Code / CreativeFlumeProjects / cf-website / node_modules解析文件/ Users / richie / Code解析'file'vertx / CreativeFlumeProjects / cf-website / node_modules / vertx不存在/Users/richie/Code/CreativeFlumeProjects/cf-website/node_modules/vertx.js不存在[/ Users / richie / Code / CreativeFlumeProjects / cf-website / src / vertx] [/ Users / richie / Code / CreativeFlumeProjects / cf-website / src / vertx] [/Users/richie/Code/CreativeFlumeProjects/cf-website/src/vertx.js] [/ Users / richie / Code / CreativeFlumeProjects / cf-website / node_modules / vertx] [/ Users / richie / Code / CreativeFlumeProjects / cf-website / node_modules / vertx] [/Users/richie/Code/CreativeFlumeProjects/cf-website/node_modules/vertx.js] @ . /~/es6-promise/dist/es6-promise.js 132:20-30 ./~/bson/lib/bson/index.js中的警告关键依赖项:20:16-29依赖项的请求是表达式44:18-31依赖的请求是exp ression 71:19-32依赖的请求是表达式@ ./~/bson/lib/bson/index.js 20:16-29 44:18-31 71:19-32警告在./~/require_optional /index.js关键依赖关系:63:18-42依赖关系的请求是表达式71:20-44依赖关系的请求是表达式78:35-67依赖关系的请求是表达式@ ./~ /require_optional/index.js 63:18-42 71:20-44 78:35-67警告在./~/require_optional/README.md模块解析失败:/ Users / richie / Code / CreativeFlumeProjects / cf-website / node_modules /require_optional/README.md第1行:意外的令牌ILLEGAL您可能需要一个适当的加载器来处理此文件类型 . | #require_optional |解决我们在node.js中没有optionalPeerDependencies概念的问题,这使得任选包含本机模块变得麻烦@ ./~/require_optional ^ . / . * $警告在./~/require_optional/LICENSE模块解析失败:/ Users / richie / Code / CreativeFlumeProjects / cf-website / node_modules / require_optional / LICENSE第1行:意外的标识符您可以需要一个合适的加载器来处理这种文件类型 . | Apache许可证| 2.0版,2004年1月| http://www.apache.org/licenses/ @ ./~/require_optional ^ . / . * $ /Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235900返回 Map [req ] || (function(){throw new Error(“找不到模块'”req“' . ”)}()); ^错误:找不到模块'./node-mongodb-native' . at /Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235900:42 at webpackContextResolve(/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235900 :90)在webpackContext(/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235897:30)在Object . (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:48684:37)at webpack_require(/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js: 20:30)在对象 . (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:52685:17)at webpack_require(/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js: 20:30)在对象 . (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:236259:15)at webpack_require(/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js: 20:30)at Object.exports.contain.exports.reachTemplate.internals.Any.applyFunctionToChildren.internals.Err.toString.internals.getPath.internals.serializer.internals.annotate.internals.Response._prepare.internals.Response._processPrepare .internals.Auth.test.internals.Auth.payload.internals.Auth.response.internals.Authenticator.exports.wrap.internals.isIsoDate.internals.compare.internals.Date.min.internals.Date.max.internals.Connection ._init.internals.Connection._start.internals.Connection._stop.internals.Connection._dispatch.internals.Methods._add.internals.state.internals.payload.internals.compare.internals.Number.min.internals.Number.max .internals.Number.greater.internals.Number.less.internals.Number.multiple.internals.Number.integer.internals.Number.negative.internals.Number.positive.internals.Object.le ngth.internals.Object.min.internals.Object.max.internals.Object.assert.internals.compare.internals.String.min.internals.String.max.internals.String.creditCard.internals.String.length.internals . String.regex.internals.String.alphanum.internals.String.token.internals.String.email.internals.String.ip.internals.String.uri.internals.String.isoDate.internals.String.guid.internals.String . hex.internals.String.hostname.internals.String.lowercase.internals.String.uppercase.internals.Request.internals.Response.writeHead.internals.Topo.add.exports.execute.internals.prerequisites.internals.handler.internals . fromString.internals.pre.module.exports.internals.Plugin.internals.Plugin.register.internals.Protect.run.internals.Request.internals.Request._execute.internals.Request._lifecycle.internals.Request._invoke.internals . Server.start.internals.Server.initialize.internals.Server._start.internals.Server.stop._invoke.exports.send.internals.marshal.internals.fail.internals.transmit.internals.state.internal s.input.exports.response.internals.Router.normalize.internals.parseParams.internals.Router.table.internals.Policy.get.internals.Policy._callGenerateFunc.internals.Policy.set.exports.generateKey.exports.encrypt . exports.decrypt.exports.hmacWithPassword.exports.seal.exports.unseal.internals.Array.items.internals.Array.ordered.internals.Array.min.internals.Array.max.internals.Array.length.internals.Binary . min.internals.Binary.max.internals.checkIpV6.exports.validate.internals.validate.internals.Definitions.parse.Items.serial.internals.unsign.Items.serial.internals.unsign.internals.decode.internals.Definitions . format.Items.serial.exports.prepareValue.internals.encode.internals.sign.internals.Parser.internals.Parser.parse.decoder.once.writeFile.internals.Parser.raw.decoder.once.internals.Parser.multipart . onPart.writeFile.exports.Dispenser.internals.Dispenser.internals.Client.request.internals.Client.read.internals.Client.parseCacheControl.internals.Client._shortcut.map ../ connection(/ Users / r ichie /代码/ CreativeFlumeProjects / CF-网站/公/ server.bundle.js:235702:19)

我尝试过通过谷歌找到的一些解决方案 . 将“.node”添加到我的resolve.extensions,添加node-loader,以及一些其他配置到节点对象,都无济于事 .

1 回答

  • 19

    处理服务器代码的webpack配置应该有一些附加功能以避免问题 .

    尝试添加以下内容:

    target: 'node',
        output: {
            ...,
            libraryTarget: 'commonjs',
        },
        externals: [
            /^(?!\.|\/).+/i,
        ],
    

    target 设置为 node 使webpack意识到您在Node上下文中工作,而不是在浏览器中工作 . 添加 libraryTarget: 'commonjs' 将使webpack使用简单的 require 调用来从外部库中获取函数 .

    然后在 externals 中的正则表达式中发生了重要的事情 . 它基本上排除了使用捆绑包中的非相对路径的任何要求 . 这样,如果你做 import 'react'; 它将不会被webpack打包,但如果你做 import './components/MyComponent.js'; ,它会 .

    这也意味着您必须确保您的构建服务器包含您的 node_modules 目录码 .

    为什么这一切?因为Node使用了许多本机模块,只需将它们拉入Javascript包中即可 . 您希望自己的代码通过webpack,而 node_modules 中的所有内容都可以像任何Node项目一样被访问 .

    现在,如果您在浏览器包中收到这些警告/错误,则表示您可能需要/导入仅在浏览器包中的服务器上运行的模块 . 确保只在服务器上使用的文件中要求它们 . 或者,有选择地要求它们 . 您可以在此处找到基于构建类型的选择性需求:Can I detect if my script is being processed by Webpack?

相关问题