Vue.js延迟加载

时间:2017-11-15 09:13:26

标签: javascript laravel vue.js laravel-mix

我正在使用Laravel mix来编译我的vue.js组件。现在我想懒得加载我的组件在这里找到它:

https://vuejs.org/v2/guide/components.html#Async-Components

当我尝试这个时:

Vue.component('setting', () => import('./components/settings/setting.vue'));

我明白了:

 error  in ./resources/assets/admin/vue/core.js

Syntax Error: Unexpected token (36:31)

  34 |  */
  35 |
> 36 | Vue.component('setting', () => import('./components/settings/setting.vue'));
     |                                ^

这里有什么问题?当我注册组件“正常”时,一切正常吗?

1 个答案:

答案 0 :(得分:2)

以下评论。您需要指定publicPath。 这是一个工作webpack.mix.js文件的小版本,在laravel 5.5上使用laravel-mix进行测试

const { mix } = require('laravel-mix');
mix.setPublicPath('public/');



mix.webpackConfig({
    output: {
      chunkFilename: 'js/[name].[chunkhash].js',
         publicPath: '/'
     },
    module: {
        rules: [{
            test: /\.js?$/,
            exclude: /node_modules/,
            loader: 'babel-loader',
            options: {
              presets: ['babel-preset-env'],
              plugins:['babel-plugin-dynamic-import-webpack']
            }
        },

  ]
    }
});


mix.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css')
.version();

您可能让manifest.json产生了错误的路径,因此webpack无法找到正确的块文件路径。因此,您的解决方案是修改路径,或者只是坚持使用默认路径,如上例所示。 上面的代码应该在public / js中生成app.js以及chunked文件。它还将在公共目录中生成manifest.json 现在最后只需在刀片中引用你的app.js文件

<script src="{{mix('/js/app.js')}}"></script>

请注意,您需要安装babel loader和babel动态导入插件,首先需要能够在webpack中使用babel插件,因为我不确定laravel mix是否读取.babelrc文件,如果确实如此那应该够了