Node.js 需要 webpacked 模块

Posted

技术标签:

【中文标题】Node.js 需要 webpacked 模块【英文标题】:Node.js require webpacked modules 【发布时间】:2018-09-24 19:11:03 【问题描述】:

我正试图摆脱您在npm install 各种具有自己依赖关系的模块时获得的数千个文件。

因此我想编译只使用 webpack 的库到一个 javascript 文件(和其他所需资源)中,然后以这种方式将其加载到 Node.js 项目:

入口点,将被 webpack 编译成 bundle。

module.exports = 
    lodash : require('lodash'),
    colors : require('colors'),
    test : require('test'),
    abc : require('abc')
 ;

主要

var  lodash, colors, test, abc  = require('./lib/bundle') ;

我遇到的问题是某些模块需要系统(或不可编译)模块,例如fs,而 webpack 试图将它们捆绑到。 您只需在webpack.config.js 文件中指定:

node: 
    fs : "empty",
    electron : "empty"

但是,一旦打包成包,似乎每个 require('fs') 都会因为这个设置而被 Object.freeze() 替换,然后模块使用 fs 失败。


有人有在 Node.js 项目中使用打包模块的解决方案吗?

P.S.:我尝试使用 yarnyarn autoclean --force 来删除所有不必要的文件,但它只删除了总数的 5% 到 10%。

【问题讨论】:

【参考方案1】:

使用当前的node 配置对象并设置fs: 'empty' 的问题是它将为这些模块提供一个空对象。有关 Webpack 节点的更多信息here。

您可以将 Webpack 的 target 属性设置为 'node'

为在类似 Node.js 的环境中使用而编译(使用 Node.js require 加载块,而不涉及任何内置模块,如 fspath

module.exports = 
  target: 'node'
;

阅读更多关于 Webpack 的信息Targets

另外,要导入内置模块,请使用__non_webpack_require__

生成一个未被 webpack 解析的 require 函数

【讨论】:

以上是关于Node.js 需要 webpacked 模块的主要内容,如果未能解决你的问题,请参考以下文章

Webpack 4.0.0 beta.0 发布,不再支持 Node.js 4

本地 ES 模块(浏览器或 Node.js)的热模块替换*没有* Webpack?没有构建工具

webpack入门介绍

重大变化:webpack < 5 用于默认包含 node.js 核心模块的 polyfill

使用Webpack搭建React开发环境

NO--12模拟服务器端请求之node.js