Webpack打包Node.js遇到的一个问题

问题背景

  1. 使用技术栈: typescriptNode.jsWebpack
  2. 问题描述:
    在之前做脚手架开发的时候,遇到的一个问题:在 node 代码里头写了
    #! /usr/bin/env node
    
    但是使用 webpack 打包之后,这句话没有被在打包之后的文件里头。要执行打包后的文件,就需要手动的加入这句话。这显然是一个很蠢的解决方式。
  3. 遇到的困难:不知道怎么用搜索引擎描述这样的问题,我觉得肯定有人遇到过这样的问题,但是我不知道怎么检索这类问题,就像我记录这个问题的时候,我都不知道应该起一个什么样的标题。我觉得最难的问题就是你不知道怎么用搜索引擎能懂的方式去描述你的问题。

解决方法

在我绝望之际,死马当活马医,直接把 webpack #! /usr/bin/env node 当做搜索的关键字,就发现了一些蛛丝马迹,他直接给我推荐了一个 npm 库(一个 webpack 插件)—— webpack-shebang-plugin
在这里插入图片描述

使用起来还是很简单,就是在 webpack.config.js 中配置这个插件就可以了

const ShebangPlugin = require('webpack-shebang-plugin');

module.exports = {
	plugins: [
    	// ...other webpack plugins
    	new ShebangPlugin()
	]
}

更多探索

在解决问题之后,我又好奇的看了一下他的实现,源码很短, 不到一百行,发现了一些小细节

  1. webpack 版本必须大于 4.0
    在这里插入图片描述
  2. 源码是一个类,他的构造函数实现如下:
constructor(opts = {}) {
    this.entries = {};
    this.options = {
        shebangRegExp: /[\s\n\r]*(#!.*)[\s\n\r]*/gm,
        chmod: 0o755,
        ...(opts || {})
    };
    this.shebangedAssets = {};
    if (!this.options.shebangRegExp) {
        this.options.shebangRegExp = /[\s\n\r]*(#!.*)[\s\n\r]*/gm;
    }
    if (!this.options.chmod && this.options.chmod !== 0) {
        this.options.chmod = 0o755;
    }
}

大致上是改了一下读写权限,然后用这些对那段话进行匹配
3. 这个库的实现还使用了另一个库

const { ReplaceSource } = require('webpack-sources');

看了一眼这个库源码比较多,后序有时间再研究研究。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值