我有一个构建管道,它采用 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] }
}
}