Включено частичное отображение в Webpack 4 в виде литерального текста вместо HTML - PullRequest
1 голос
/ 29 апреля 2020

Я пытаюсь включить заголовок. html в свой индекс. html, как частичный с помощью html -loader , но заголовок. html вместо этого выводится как текстовый текст HTML. Использование интерполяции, как упомянуто здесь и здесь , кажется применимым к Webpack v2. Я также заметил, что #interpolate ha sh в html -loader URL не работает; смысл интерполяции не существует в Webpack v4? Webpack выдает ошибку об объекте Invalid options , если я включаю параметры: { interpolate: true }

Tree

--dist
--node_modules
--src
----js
------index.js
----partials
------header.html
--templates
----index.html
--package.json
--webpack.config.json

webpack. config. json

const path                  = require("path"),
    webpack                 = require('webpack'),
    { CleanWebpackPlugin }  = require("clean-webpack-plugin"),
    HtmlWebpackPlugin       = require("html-webpack-plugin");

module.exports = {
   mode: "development",
   entry: {
       index: "./src/js/index.js"
   },
   plugins: [
       // new CleanWebpackPlugin(['dist/*']) for < v2 versions of CleanWebpackPlugin
       new CleanWebpackPlugin(),
       new HtmlWebpackPlugin({
           title: "Home",
           filename: "index.html",
           template: "templates/index.html",
           inject: true,
           minify: true
       })
   ],
   devtool: "source-map",
   devServer: {
       contentBase: "./dist"
   },
   output: {
       // filename: "[name].bundle.js",
       filename: "[name].[contenthash].js",
       path: path.resolve(__dirname, "dist"),
       // publicPath: "/"
   },
   optimization: {
       moduleIds: "hashed",
       runtimeChunk: "single",
       splitChunks: {
           cacheGroups: {
               vendor: {
                   test: /[\\/]node_modules[\\/]/,
                   name: "vendors",
                   chunks: "all",
               }
            }
        }
    },
    module: {
        rules: [
            {
                test: /\.(html)$/,
                loader: "html-loader",
                options: {
                   minimize: true
                }
            }
        ]
    }
}

index. html

<!DOCTYPE html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    </head>
    <body>
        <%= require("html-loader!./src/partials/header.html") %>
    </body>
</html>

Edit 1

Итак, я решил, что interpolate не работает в v1.0.0 из html-loader базис этот ответ

Мой следующий вопрос будет о том, какие альтернативы у меня есть вместо interpolate в v1.0.0?

1 Ответ

0 голосов
/ 03 мая 2020

Я понизил html-loader до v0.5.5, потому что опция interpolate не работала с html-loader v1.0.0. Кроме того, я изменил index. html на

<!DOCTYPE html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    </head>
    <body>
        <%= require("html-loader!../src/partials/header.ejs") %>
    </body>
</html>

Путь в исходном <%= require(...) %> был неверным. Интересно, это была опечатка? Я также изменил частичное с. html на .e js (Реализация, которая работает, имела партиалы в формате. html для html-webpack-plugin v3.2.0, до которого я понизил, но все еще не работал. Понятия не имею, почему это не сработало)

Я также позволил себе обновить html-loader до версии 1.1.0, как предложено @IVO GELOV, чтобы мой пакет . json выглядел так:

 "devDependencies": {
    "clean-webpack-plugin": "^3.0.0",
    "csv-loader": "^3.0.3",
    "express": "^4.17.1",
    "file-loader": "^6.0.0",
    "html-loader": "^1.1.0",
    "html-webpack-plugin": "^4.3.0",
    "webpack": "^4.42.0",
    "webpack-cli": "^3.3.11",
    "webpack-dev-middleware": "^3.7.2",
    "webpack-dev-server": "^3.10.3",
    "xml-loader": "^1.2.1"
},

И, интерполировать работал. Не уверен, что не так с html-loader v1.0.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...