1

I am using webpack version 5.46 and trying to bundle inline js code into my .html file. All I found is plugins, that are not working anymore or have no compatibility with the current webpack version. At the current moment my output is:

<head><script defer="defer" src="ui.js"></script></head><div id="react-page"></div>

But here is what I want:

<div id="react-page"></div><script >console.log('here is my code directly in the .html file!')</script>

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin')
const path = require('path')

module.exports = (env, argv) => ({
    mode: argv.mode === 'production' ? 'production' : 'development',

    // This is necessary because Figma's 'eval' works differently than normal eval
    devtool: argv.mode === 'production' ? false : 'inline-source-map',

    entry: {
        ui: './src/ui.tsx', // The entry point for your UI code
        code: './src/code.ts', // The entry point for your plugin code
    },

    module: {
        rules: [
            // Converts TypeScript code to JavaScript
            { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/ },

            // Enables including CSS by doing "import './file.css'" in your TypeScript code
            { test: /\.css$/, use: ['style-loader', { loader: 'css-loader' }] },

            // Allows you to use "<%= require('./file.svg') %>" in your HTML code to get a data URI
            { test: /\.(png|jpg|gif|webp|svg)$/, loader: 'url-loader' },
        ],
    },

    output: {
        clean: true,
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist'), // Compile into a folder called "dist"
    },

    // Tells Webpack to generate "ui.html" and to inline "ui.ts" into it
    plugins: [
        new HtmlWebpackPlugin({
            template: './src/ui.html',
            filename: 'ui.html',
            inlineSource: '.(js)$',
            chunks: ['ui'],
        })
    ]
})

Any plugins for webpack supported for this purposes?

P.S. I am creating a figma plugin and here they used an outdated library, but figma requires all the content to be in the one file directly

Alexey
  • 185
  • 12
  • I'd suggest looking at [this question](https://stackoverflow.com/questions/39555511/inline-javascript-and-css-with-webpack), although the proper answer has a comment it doesn't work anymore, while the others might not be ideal. – Kelvin Schoofs Jul 24 '21 at 18:30
  • @KelvinSchoofs accepted answer is outdated & not working with the current version, second answer I tried 10 minutes ago and it bundles the same variant as I have now, third is deprecated. – Alexey Jul 24 '21 at 18:31
  • That's why I placed it as a comment instead of just flagging your question as a duplicate. I noticed that it might indeed not work anymore, but you could still test it. After all, the outdated answer's comment mentions a version incompatibility, which might've been resolved by now. I'm kinda surprised the React variant doesn't work, but to be fair, I've never consciously used it. – Kelvin Schoofs Jul 24 '21 at 18:36
  • Did you ever get an answer to this? I'm also looking at a Figma plugin (Finding out how to build angular into a single html file!) – Baffour Nov 13 '22 at 14:40
  • @Baffour nope, I didn't.. I wasn't googling more than a day. I think that there is some way - probably using deprecated stuff.. but not sure about that. I did it by hands because it wasn't a big problem so it was the fastest way. What I would do now - write a script that first runs the build and then insert inline generated script. Using python or node.js – Alexey Nov 14 '22 at 15:42
  • @Baffour I would do it because it is simplier for me, rather than writing my own js stuff – Alexey Nov 14 '22 at 15:42
  • @Alexey I ended up essentially doing that using webpack (see here https://github.com/Baffour/ng-figma-plugin-boilerplate) I'm sure there's a tidier way but I'm no expert and bundling! Also all I did was get the boilerplate angular app opening in a plug-in though so don't know what the limitations are. – Baffour Nov 19 '22 at 03:32

0 Answers0