node-require-webpack-plugin
TypeScript icon, indicating that this package has built-in type declarations

0.1.1 • Public • Published

node-require-webpack-plugin

为 node.js 环境下的 webpack 打包结果提供动态 require 支持。

为什么要使用

在某些情况下,我们需要让 webpack 打包的文件在 node.js 环境下运行,例如 GitHub Action 的开发,但是会有一些问题:

const a = require(process.argv)

上面的代码中,我们动态 require 了用户传入的参数,但 webpack 并不知道 -- 在 build 时它会尝试寻找 process.argv 的值并读取其内容以供打包,这很明显是无法做到的。

因此在我们执行打包后的代码时会得到 module not found 异常。

用法

首先安装依赖:

npm install node-require-webpack-plugin -D

添加 plugin 配置到 webpack.config.js:

module.exports = {
  plugins: [
    new NodeRequireWebpackPlugin()
  ]
}

如果你的项目基于 ts-loader,请将 transpileOnly 置为 true

  module: {
  rules: [
    {
      test: /\.tsx?$/,
      loader: 'ts-loader',
      options: {
        transpileOnly: true
      }
    }
  ]
}

在你需要动态 require 的语句前增加 /*#__PURE_REQUIRE__*/ 标记,例如:

const requireResult =  /*#__PURE_REQUIRE__*/ require(`${configPath}`);

工作原理

  • 将所有用户标记 /*#__PURE_REQUIRE__*/ 的模块全部换成一个函数 __WEBPACK_PURE_REQUIRE__
  • 为每个入口文件添加 __WEBPACK_PURE_REQUIRE__ 的实现:
function __WEBPACK_PURE_REQUIRE__(content) {
  /******/
  return require(content)
}

Readme

Keywords

none

Package Sidebar

Install

npm i node-require-webpack-plugin

Weekly Downloads

1

Version

0.1.1

License

MIT

Unpacked Size

20.5 kB

Total Files

38

Last publish

Collaborators

  • yzl520