vue cli 如何创建自定义块并挂钩 index.html?

vue cli how to create a custom chunk and hook in index.html?

我想创建一个自定义块并附加到生成的 index.html 中。我使用 vue create . 创建了一个自定义项目并添加了一个 vue.config.js 文件。

vue.config.js

module.exports = {
  lintOnSave: true,
  configureWebpack: {
    optimization: {
      splitChunks: {
        cacheGroups: {
          utiltest: {
            name: 'utiltest',
            test: /utils[\/]test/,
            priority: -30,
            chunks: 'initial',
          },
        },
      },
    },
  },
};

我在 src/utils/test 中有一些实用函数,我想为其创建一个单独的包并附加到 index.html 中。像这样

<script type="text/javascript" src="/js/chunk-utiltest.js"></script>
<script type="text/javascript" src="/js/chunk-vendors.js"></script>
<script type="text/javascript" src="/js/app.js"></script>

但是在生成的 index.html 文件中它没有为 utiltest 创建块,它只有这 2

<script type="text/javascript" src="/js/chunk-vendors.js"></script>
<script type="text/javascript" src="/js/app.js"></script>

注意:我在我的 main.js 中导入了来自 utils/test 的函数,比如

import testHook from '@/utils/test';
...
testHook();

如果您只是想创建一个新块,您可以添加另一个入口点。现在输出目录中有两个文件可用。 public/index.jspublic/untiltest.js.

module.exports = (env, options) => ({
  entry: {
    index: './src/index',
    utiltest: './src/utiltest',
  },
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, 'public'),
  },
  ....
  

你也可以name the chunks你想在vue中导入

const routeOptions = [
  { path: '/', name: 'Home' },
  { path: '/about', name: 'About' },
  { path: '/login', name: 'Login' }
]

const routes = routeOptions.map(route => {
  return {
    ...route,
    component: () => import(/* webpackChunkName: "[request]" */ `../views/${route.name}.vue`)
  }
})

const router = new VueRouter({
  routes
})

在普通的 html 文件中,您还可以将其与 html webpack plugin

  ...
  new HtmlWebpackPlugin({
    title: 'Vue App',
    template: './src/template.html',
    filename: 'index.html',
    chunks: ['index', 'utiltest'],
  }),