在2019年左右离开训练之后,我又回到了Laravel的开发阶段.我更习惯于混合而不是Vite,但我喜欢Blade中的@Vite助手.对于这个应用程序,我必须在根公共目录中提供一个Firebase服务工作者,可在https://example.com/firebase-messaging-sw.js访问.我的vite.config.js如下所示:
import { defineConfig } from 'vite';
import laravel from 'laravel-vite-plugin';
export default defineConfig({
plugins: [
laravel({
valetTls: 'whatever.test',
input: [
'resources/css/app.css',
'resources/js/app.js',
'resources/js/firebase-messaging-sw.js'
],
refresh: true,
})
]
});
问题是,Firebase-Messaging-sw.js使用IMPORT语句从 node 模块中获取Firebase函数,这些函数在编译后的面向公众的文件中也以简化的胡言乱语结束.因为服务工作者不是作为模块引用的,所以"导入"语句会失败.我所希望的就是将该文件编译成一个单独的JavaScript文件,而不在最终产品中导入.使用Mix很容易做到这一点:
const mix = require('laravel-mix');
mix.js('./build/firebase-messaging-sw.js', './public/firebase-messaging-sw.js');
但在这一点上,我已经陷入了太深的困境,无法切换到Mix.我可以对我的配置做些什么,以使VITE输出一个干净的文件,最好没有散列的文件名?我看到了this个,但它假设对Rollup的了解比我深得多,而且老实说,我不确定在这种情况下Laravel/Vite/Rollup之间的界限在哪里.这似乎是一个非常简单的问题,但我找不到最近的答案.
每this answer个,我try 将我的vite.config.js更改为:
export default defineConfig({
build: {
rollupOptions: {
output: {
manualChunks: {}
},
}
},
plugins: [
laravel({
valetTls: 'whatever.test',
input: [
'resources/css/app.css',
'resources/js/app.js',
'resources/js/firebase-messaging-sw.js'
],
refresh: true,
})
],
});
但这对VITE的yields 没有影响.