为了账号安全,请及时绑定邮箱和手机立即绑定

在后端使用网络包

在后端使用网络包

慕码人2483693 2022-09-23 18:34:56

我正在尝试使用express制作节点后端服务,我也想使用webpack将所有内容捆绑在单个文件中(不知道它是否有意义,我只是在学习)。我以这种方式设置:package.json


{

  "name": "something",

  "version": "1.0.0",

  "description": "",

  "main": "index.js",

  "scripts": {

    "build": "webpack --config webpack.config.js --mode=production",

    "test": "echo \"Error: no test specified\" && exit 1"

  },

  "author": "",

  "license": "ISC",

  "devDependencies": {

    "webpack": "^4.43.0",

    "webpack-cli": "^3.3.11",

    "webpack-node-externals": "^1.7.2"

  },

  "dependencies": {

    "express": "^4.17.1"

  }

}

这是我的文件:webpack.config.js


const path = require('path');

const nodeExternals = require('webpack-node-externals');

const webpack = require('webpack');

const backend = {

  name: 'backend',

  target: 'node',

  devtool: 'source-map',

  externals: [nodeExternals],

  entry: path.resolve(__dirname, 'src/index.js'),

  output: {

    path: path.resolve(__dirname, 'bin'),

    filename: 'app.js'

  }

};


module.exports = [backend];

module.exports.plugins = [

  new webpack.SourceMapDevToolPlugin({})

];

这是我的:src/index.js


var express = require('express');

var httpsrv = express();


httpsrv.get("/", function(res, rep) {

  console.log("inside get.");

  rep.send("<div>hey js!</div>");

});


httpsrv.listen(8080, function() {

  console.log("server started.");

});

很基本,不是吗?当我构建并运行()应用程序时,一切都很好,它的行为符合预期,但有些事情听起来很奇怪。文件太短而无法捆绑库,当我将我的放入容器中时,我收到此错误:node ./bin/app.jsapp.jsexpressapp.jsnode:alpine


所以我没有得到我想要的:单个文件中的Web服务。这是怎么回事?


查看完整描述

2 回答

?
MM们

TA贡献1557条经验 获得超2个赞

我相信这是因为您正在设置选项。externals

这是来自网络包文档

外部配置选项提供了一种从输出捆绑包中排除依赖项的方法。相反,创建的捆绑包依赖于该依赖关系存在于使用者(任何最终用户应用程序)环境中。此功能通常对库开发人员最有用,但是有各种各样的应用程序可用于此功能。

同样来自网络包节点外部 NPM 页面:

externals: [nodeExternals()],以忽略node_modules文件夹中的所有模块

如果您真的想在webpack输出中包含部分(或全部)或依赖项,则需要更改或删除该选项。


查看完整回答
反对 回复 2022-09-23
?
慕码人8056858

TA贡献1494条经验 获得超6个赞

拥有模块捆绑器的要点主要是向客户端提供较小的捆绑软件大小。鉴于您的代码将从服务器端执行,并且发送到客户端的内容只是对他们发出的任何请求的响应,对于刚刚学习为后端项目设置Webpack的人来说,这实际上没有意义。

如果你有兴趣使用一些Javascript风格,你仍然可以这样做,你可以通过像Babel这样的转译器发送你的代码,但我认为情况并非如此。

关于错误:原因似乎是您已将属性设置为排除您的属性,并且这就是您的依赖项所在的位置。externalsnodeExternalsexpress


查看完整回答
反对 回复 2022-09-23
  • 2 回答
  • 0 关注
  • 8 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信