assets-webpack-plugin
assets-webpack-plugin copied to clipboard
Possible Typo in createOutputWriter.js
Describe the bug
On line 51 of lib/output/createOutputWriter.js
the local variable localFs
is either filestream or the fs module from Node, but on line 88 the method localFs.mkdirp
is called to output the json file. The resulting error during a build is below.
localFs.mkdirp(options.path, mkdirCallback);
^
TypeError: localFs.mkdirp is not a function
Changing this to localFs.mkdir
seems to fix the issue.
To Reproduce Steps to reproduce the behavior:
- Install at 7.1.1
- Set
options.keepInMemory
totrue
- Run build
Expected behavior For the JSON file to be output correctly in memory.
Webpack Config
const path = require("path");
const resolve = require("path").resolve;
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CopyPlugin = require("copy-webpack-plugin");
const NodePolyfillPlugin = require("node-polyfill-webpack-plugin");
const AssetsPlugin = require("assets-webpack-plugin");
const runEnv = process.env.NODE_ENV || "development";
module.exports = {
entry: "./src/index.tsx",
output: {
path: resolve(__dirname, "dist"),
filename: runEnv === "production" ? "[name].[hash].js" : "bundle.js",
publicPath: runEnv === "production" ? "/request" : "/",
},
target: "web",
mode: runEnv,
devtool: runEnv === "production" ? "cheap-source-map" : "eval-source-map",
devServer: {
contentBase: path.join(__dirname, "dist"),
port: 3003,
historyApiFallback: true,
openPage: "/request",
hot: true,
},
resolve: {
extensions: [".ts", ".tsx", ".js", ".json"],
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: "babel-loader",
exclude: /node_modules/,
},
{
test: /\.svg$/,
use: ["@svgr/webpack", "url-loader"],
},
{
test: /\.(png|pdf|jpg|eot|woff|woff2|ttf|gif)$/,
oneOf: [
{
loader: "url-loader",
options: {
limit: 9000,
},
},
],
},
],
},
plugins: [
new HtmlWebpackPlugin({
filename: "index.html",
template: "src/index.html",
excludeChunks: ["server"],
}),
new CopyPlugin({
patterns: [
{
from: "./src/_assets",
to: "assets",
},
],
}),
new NodePolyfillPlugin(),
new AssetsPlugin({
filename: "bundlePath.json",
fullPath: false,
path: path.join(__dirname, "dist"),
includeAllFileTypes: false,
fileTypes: ["js"],
keepInMemory: true,
}),
],
};
Desktop (please complete the following information):
- OS: Win 11
- Node version: 16.13.0 LTS
- Plugin version: 7.1.1
Additional context Add any other context about the problem here.
Actually, looking at the file history it looks like the dependency for mkdirp
was just removed from this version but changed back to localFs.mkdirp
from localFs.mkdir
.
Ran into the same thing. Can't use the plugin with webpack-middleware-dev like this.
Actually, looking at the file history it looks like the dependency for
mkdirp
was just removed from this version but changed back tolocalFs.mkdirp
fromlocalFs.mkdir
.
Here's my main version info: node: 21.6.2 npm : 10.4.0 webpack: 5.90.3 webpack-cli: 5.1.4 webpack-dev-middleware: 7.0.0 webpack-dev-server: 5.0.2 webpack-sources: 3.2.3 assets-webpack-plugin: 7.1.1
At some point, when I upgraded to the above mentioned "npm package", I got the same error.Until then, it had been running fine.That's weird.
Personally, I think it's due to the recent "webpack" update that removed the outdated "mkdirp", see: https://webpack.js.org/blog/2020-10-10-webpack-5-release/#filesystems
Then, after I changed "mkdirp" to "mkdir" as you said, it triggered a new error.
After troubleshooting, the final change to this worked: localFs.mkdir(options.path, { recursive: true }, mkdirCallback);
This issue was created a long time ago, but I'm posting the problem I encountered and the solution for your reference.