Laravel-mix Webpack 公共路径

Posted

技术标签:

【中文标题】Laravel-mix Webpack 公共路径【英文标题】:Laravel-mix Webpack Public Path 【发布时间】:2018-07-29 12:01:12 【问题描述】:

所以我使用 Laravel-Mix 并在 Webpack 中设置了代码拆分。我正在为我的 Vue 组件使用动态导入。

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

由于我也在使用 Babel,因此我从项目根目录中的 .babelrc 文件中加载了 syntax-dynamic-import 插件。

一切正常,Webpack 在构建时正确拆分代码。但是,问题是,它将块放在公共根目录而不是public/js

如果在我的 webpack.mix.js 中我这样做...

mix.js('resources/assets/js/app.js', 'public/js');

...然后混合将构建文件正确放置在/js 目录中。

但是为了对文件进行分块,如果在 webpack.mix.js 中我会...

 mix.webpackConfig(
    entry: 
        app: './resources/assets/js/app.js',
    ,
    output: 
        filename: '[name].js',
        publicPath: 'public/js',
    
);

...无论我将什么分配给 publicPath 属性,所有块都放在公共根目录中。

知道我在这里缺少什么吗?

【问题讨论】:

【参考方案1】:

只需更改 laravel 根文件夹下 webpack.mix.js 中的块路径,

mix.webpackConfig(
    output: 
        filename:'js/main/[name].js',
        chunkFilename: 'js/chunks/[name].js',
    ,
);

还要注意 laravel 改变主 js 位置的方式是使用 mix.js 函数

mix.js('resources/assets/js/app.js', 'public/js/main')

【讨论】:

这行得通!但我不得不同时使用filename: 'js/[name].js'chunkFilename: 'js/chunks/[name].js,这样主app.js 和块都嵌套在js 目录下。如果您更新您的答案以反映我会接受它。 :) 当您的应用程序增长时,将所有块文件放在 public/js 下的问题不是一个好主意。您的主文件之类的 app.js 会在人群中消失。但如果你更喜欢这种方式,你可以这样做 output: chunkFilename: 'js/[name].js', 在这里阅读更多 https://webpack.js.org/configuration/output/ 不,你没有理解我在评论什么。将块文件放在他们自己的目录中就可以了。但是,由于我为我的一些“主要”js 文件(如 app: './resources/assets/js/app.js')定义 entry 而没有定义 filename: '[name].js' 主要应用程序文件最终位于公共根目录 【参考方案2】:

尝试使用mix.setPublicPath('public/build')方法设置公共路径。

【讨论】:

这似乎改变了一些东西,但我似乎看不到构建的文件放在哪里? public 这里是相对于项目根目录的,因为当我以这种方式设置文件时,文件没有放入 public/js。使用此方法时,混合清单文件也不会更新。 好吧,这似乎可行,但仅在以mix.js('resources/assets/js/app.js') 的方式定义资源时,据我所知,在使用.webpackConfig() 方法时它不起作用 是否可以仅对 prod 构建执行此操作(例如,对 prod 使用 cdn,而对本地 env 使用本地目录)

以上是关于Laravel-mix Webpack 公共路径的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:使用 laravel-mix webpack 时未定义 Vue

Laravel-mix 中文文档

来自公共路径的 Webpack 原始加载器?

laravel-mix 文档翻译

使用webpack打包的后,公共请求路径的配置问题

Laravel home(~) SCSS 路径无法正确解析