0

我有一个构建管道,它采用 ClojureScript 代码并使用 Shadow-Cljs 将其转换为 Javascript。transpile 可以导出npm 模块节点库

然后输出通过带有 Babel loader 的 Webpack 传递给浏览器的 polyfill。

所有这些步骤是: Shadow-CLIJS(CLJS) -> Webpack(Node Library) -> Web

中间的“节点库”在 Node.js 中运行良好(参见下面的 repl 输出),但由于某种原因,Webpack polyfill 在导入 React 应用程序时会加载一个空对象。

不知道如何解决这个问题。

webpack.config.js

  const path = require("path");
  const NodePolyfillPlugin = require("node-polyfill-webpack-plugin");

  const paths = {
    src: path.resolve(__dirname, "../sdk-js/lib/sdk.js"),
    build: path.resolve(__dirname, "./lib"),
  };

  module.exports = {
    entry: paths.src,
    mode: "development",
    devtool: "source-map",
    output: {
      path: paths.build,
      filename: "index.js",
    },
    plugins: [
      new NodePolyfillPlugin(),
    ],
    devtool: 'inline-source-map',
    resolve: {
      modules: [paths.src, "node_modules"],
      extensions: [".tsx", ".ts", ".js", ".json"],
    },
    module: {
      rules: [
        {
          test: /\.(ts|tsx|js)$/,
          use: {
            loader: "babel-loader",
            options: {
              presets: [
                [
                  "@babel/preset-env",
                  {
                    targets: {
                      esmodules: true,
                    },
                  },
                ],
              ],
            },
          },
        },
      ],
    },
  };

节点库的 REPL 输出:

> sdk
{
  v1: {
    init: [Function: Ew] {
      l: [Function (anonymous)],
      g: [Function (anonymous)],
      J: 1
    },
    halt: [Function: halt],
    account: { create: [Function: create] },
    workspace: { available: [Function: available] }
  }
}
4

1 回答 1

0

这是一个 RTM 问题。Webpack 需要librarylibraryTarget设置。

output: {
    path: paths.build,
    filename: "index.js",
    library: "sdk",
    libraryTarget: "commonjs2",
  },
于 2022-02-02T20:24:24.283 回答