webpack打包nodejs后端环境

3 篇文章 0 订阅
2 篇文章 0 订阅

最好不要用什么webpack打包nodejs应用,太蠢了,详情参考最新写的


webpack好多样例都是用在前端的,百度也很难找到一个像样的后端打包教程,自己从谷歌还有webpack官方文档总结一下吧。

入门

首先准备了一个main.js这个入口文件

import request from './request'
import cherrio from './query'

request('https://www.baidu.com/s?ie=UTF-8&wd=axios').then(res=>{
    var $ = cherrio(res)
    var rs = $([
        {
            test:'.c-container',
            attr:'srcid'
        }
    ])
    console.log(JSON.stringify(rs))
})

上面的代码只是个简单的爬虫balabala的,其中用了nodejs环境暂不支持的es6 import关键字。

然后我们在使用webpack api写一个webpack.js的webpack配置文件

var webpack = require('webpack')
webpack({
    mode: "development",
    entry: './main.js',
    output: {
        filename: 'bundle.js',
        path: __dirname
    },
    target: 'node' // 这是最关键的
}, (err, stats) => {
    if (err) {
        console.log('err:', err)
    }
})

其中的target配置项是打包的目标环境,默认为浏览器环境,加了这个就可以直接打包nodejs环境的js了

压缩优化

但是这个并没有结束,打包出来的bundle.js变得非常大,即使自己的全部js文件都非常的小
在这里插入图片描述
这时就需要用到webpack的externals

简单概括

这个externals配置项原本就是为了前端CDN引入js,优化bundle.js的大小,比如

webpack({
    //...
    externals:{
        axios:"axios"
    }
}

在打包出的bundle.js中的axios模块就只有这么点,没有将axios模块全部引进去,其中的axios为全局中的axios,就实现了CDN引入js的作用
在这里插入图片描述

实际运用

官方在externas配置项是有推荐webpack-node-externals这个插件的,但实际使用并没有效果,打包出来的大小还是1.46MB,也查不出什么问题

利用简单概括的特性自己写了一段js

var package = require('package.json'),
	webpack = require('webpack')

var externals = {},
    pends = Object.assign(package.dependencies,package.devDependencies)
for(let i in pends){
    externals[i] = `require('${i}')`
}
webpack({
    //...
    externals
}

就能很明显的看到bundle.js变得超级小了
在这里插入图片描述

debugger

需要dubgger的话需要使用devtools配置项

webpack({
	//...
    mode: "development",
    target: 'node',
    devtool: 'source-map'
})

然后在vscode中,推荐这一个配置就可以在定位这个bundle.js文件就可以debugger了

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "node 文件",
            "program": "${file}",
            "skipFiles": [
                "<node_internals>/**"
            ],
        }
     ]
}

唯一不足的是,目前没有找到vscode + sourcemap使用原生的断点功能debugger,目前的解决方法有两个

1.在代码中添加debugger
2.运行到debugger处时使用vscode的断点,下次再debugger时会保留这些断点


2020-5-24 12:14 更新,终于找到了vscode怎么使用原生断点功能了

由于我的webpack打包的bundle.js放在子目录utils中,vscode的配置为

{
       "type": "node",
       "request": "launch",
       "name": "webpack后端测试",
       "program": "${workspaceFolder}/utils/bundle.js",
       "sourceMapPathOverrides": {
           "webpack:///./~/*": "${workspaceRoot}/node_modules/*",
           "webpack:///./*": "${workspaceRoot}/utils/*",
           "webpack:///*": "*"
       }
}

sourceMapPathOverrides中的webpack:///./*为关键配置项,加上bundle.js所在的目录即可实现使用vscode的断点功能

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node后端项目是使用JavaScript语言编写的,这意味着我们可以使用Webpack对其进行打包,从而生成一个可执行的文件,以便在服务器端运行。 首先,需要在项目中安装Webpack及其相关依赖。可以使用以下命令: ``` npm install webpack webpack-cli -D ``` 接下来,创建一个新的Webpack配置文件。在配置文件中,需要指定入口文件、输出路径以及要使用的加载器和插件等配置信息。 以下是典型的Webpack配置文件示例: ```javascript const webpack = require('webpack'); const path = require('path'); module.exports = { entry: './src/index.js', target: 'node', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'dist'), }, module: { rules: [ { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-env'] } } } ] }, plugins: [ new webpack.DefinePlugin({ 'process.env.NODE_ENV': JSON.stringify('production') }) ] }; ``` 在上面的配置中,首先使用了Node.js内置的path模块来解析出输出文件夹的绝对路径,然后指定了入口文件和输出文件名和路径。还配置了Babel加载器来转译ES6以上语法,并且使用了一个定义插件来指定项目的环境为生产环境。 最后,可以使用以下命令来运行Webpack打包: ``` npx webpack --config webpack.config.js ``` 这样就可以生成一个打包后的文件,可供在Node.js环境运行,并能够正常访问API接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值