@@ -865,6 +865,157 @@ public function testItCanSpecifyAttributesForPreloadedAssets()
865
865
$ this ->cleanViteManifest ($ buildDir );
866
866
}
867
867
868
+ public function testItCanSuppressPreloadTagGeneration ()
869
+ {
870
+ $ buildDir = Str::random ();
871
+ $ this ->makeViteManifest ([
872
+ 'resources/js/app.js ' => [
873
+ 'src ' => 'resources/js/app.js ' ,
874
+ 'file ' => 'assets/app.versioned.js ' ,
875
+ 'imports ' => [
876
+ 'import.js ' ,
877
+ 'import-nopreload.js ' ,
878
+ ],
879
+ 'css ' => [
880
+ 'assets/app.versioned.css ' ,
881
+ 'assets/app-nopreload.versioned.css ' ,
882
+ ],
883
+ ],
884
+ 'resources/js/app-nopreload.js ' => [
885
+ 'src ' => 'resources/js/app-nopreload.js ' ,
886
+ 'file ' => 'assets/app-nopreload.versioned.js ' ,
887
+ ],
888
+ 'import.js ' => [
889
+ 'file ' => 'assets/import.versioned.js ' ,
890
+ ],
891
+ 'import-nopreload.js ' => [
892
+ 'file ' => 'assets/import-nopreload.versioned.js ' ,
893
+ ],
894
+ 'resources/css/app.css ' => [
895
+ 'src ' => 'resources/css/app.css ' ,
896
+ 'file ' => 'assets/app.versioned.css ' ,
897
+ ],
898
+ 'resources/css/app-nopreload.css ' => [
899
+ 'src ' => 'resources/css/app-nopreload.css ' ,
900
+ 'file ' => 'assets/app-nopreload.versioned.css ' ,
901
+ ],
902
+ ], $ buildDir );
903
+ ViteFacade::usePreloadTagAttributes (function ($ src , $ url , $ chunk , $ manifest ) use ($ buildDir ) {
904
+ $ this ->assertSame ([
905
+ 'resources/js/app.js ' => [
906
+ 'src ' => 'resources/js/app.js ' ,
907
+ 'file ' => 'assets/app.versioned.js ' ,
908
+ 'imports ' => [
909
+ 'import.js ' ,
910
+ 'import-nopreload.js ' ,
911
+ ],
912
+ 'css ' => [
913
+ 'assets/app.versioned.css ' ,
914
+ 'assets/app-nopreload.versioned.css ' ,
915
+ ],
916
+ ],
917
+ 'resources/js/app-nopreload.js ' => [
918
+ 'src ' => 'resources/js/app-nopreload.js ' ,
919
+ 'file ' => 'assets/app-nopreload.versioned.js ' ,
920
+ ],
921
+ 'import.js ' => [
922
+ 'file ' => 'assets/import.versioned.js ' ,
923
+ ],
924
+ 'import-nopreload.js ' => [
925
+ 'file ' => 'assets/import-nopreload.versioned.js ' ,
926
+ ],
927
+ 'resources/css/app.css ' => [
928
+ 'src ' => 'resources/css/app.css ' ,
929
+ 'file ' => 'assets/app.versioned.css ' ,
930
+ ],
931
+ 'resources/css/app-nopreload.css ' => [
932
+ 'src ' => 'resources/css/app-nopreload.css ' ,
933
+ 'file ' => 'assets/app-nopreload.versioned.css ' ,
934
+ ],
935
+ ], $ manifest );
936
+
937
+ (match ($ src ) {
938
+ 'resources/js/app.js ' => function () use ($ url , $ chunk , $ buildDir ) {
939
+ $ this ->assertSame ("https://example.com/ {$ buildDir }/assets/app.versioned.js " , $ url );
940
+ $ this ->assertSame ([
941
+ 'src ' => 'resources/js/app.js ' ,
942
+ 'file ' => 'assets/app.versioned.js ' ,
943
+ 'imports ' => [
944
+ 'import.js ' ,
945
+ 'import-nopreload.js ' ,
946
+ ],
947
+ 'css ' => [
948
+ 'assets/app.versioned.css ' ,
949
+ 'assets/app-nopreload.versioned.css ' ,
950
+ ],
951
+ ], $ chunk );
952
+ },
953
+ 'resources/js/app-nopreload.js ' => function () use ($ url , $ chunk , $ buildDir ) {
954
+ $ this ->assertSame ("https://example.com/ {$ buildDir }/assets/app-nopreload.versioned.js " , $ url );
955
+ $ this ->assertSame ([
956
+ 'src ' => 'resources/js/app-nopreload.js ' ,
957
+ 'file ' => 'assets/app-nopreload.versioned.js ' ,
958
+ ], $ chunk );
959
+ },
960
+ 'import.js ' => function () use ($ url , $ chunk , $ buildDir ) {
961
+ $ this ->assertSame ("https://example.com/ {$ buildDir }/assets/import.versioned.js " , $ url );
962
+ $ this ->assertSame ([
963
+ 'file ' => 'assets/import.versioned.js ' ,
964
+ ], $ chunk );
965
+ },
966
+ 'import-nopreload.js ' => function () use ($ url , $ chunk , $ buildDir ) {
967
+ $ this ->assertSame ("https://example.com/ {$ buildDir }/assets/import-nopreload.versioned.js " , $ url );
968
+ $ this ->assertSame ([
969
+ 'file ' => 'assets/import-nopreload.versioned.js ' ,
970
+ ], $ chunk );
971
+ },
972
+ 'resources/css/app.css ' => function () use ($ url , $ chunk , $ buildDir ) {
973
+ $ this ->assertSame ("https://example.com/ {$ buildDir }/assets/app.versioned.css " , $ url );
974
+ $ this ->assertSame ([
975
+ 'src ' => 'resources/css/app.css ' ,
976
+ 'file ' => 'assets/app.versioned.css ' ,
977
+ ], $ chunk );
978
+ },
979
+ 'resources/css/app-nopreload.css ' => function () use ($ url , $ chunk , $ buildDir ) {
980
+ $ this ->assertSame ("https://example.com/ {$ buildDir }/assets/app-nopreload.versioned.css " , $ url );
981
+ $ this ->assertSame ([
982
+ 'src ' => 'resources/css/app-nopreload.css ' ,
983
+ 'file ' => 'assets/app-nopreload.versioned.css ' ,
984
+ ], $ chunk );
985
+ },
986
+ })();
987
+
988
+ return Str::contains ($ src , '-nopreload ' ) ? false : [];
989
+ });
990
+
991
+ $ result = app (Vite::class)(['resources/js/app.js ' , 'resources/js/app-nopreload.js ' ], $ buildDir );
992
+
993
+ $ this ->assertSame (
994
+ '<link rel="preload" as="style" href="https://example.com/ ' .$ buildDir .'/assets/app.versioned.css" /> '
995
+ .'<link rel="modulepreload" href="https://example.com/ ' .$ buildDir .'/assets/app.versioned.js" /> '
996
+ .'<link rel="modulepreload" href="https://example.com/ ' .$ buildDir .'/assets/import.versioned.js" /> '
997
+ .'<link rel="stylesheet" href="https://example.com/ ' .$ buildDir .'/assets/app.versioned.css" /> '
998
+ .'<link rel="stylesheet" href="https://example.com/ ' .$ buildDir .'/assets/app-nopreload.versioned.css" /> '
999
+ .'<script type="module" src="https://example.com/ ' .$ buildDir .'/assets/app.versioned.js"></script> '
1000
+ .'<script type="module" src="https://example.com/ ' .$ buildDir .'/assets/app-nopreload.versioned.js"></script> ' ,
1001
+ $ result ->toHtml ());
1002
+
1003
+ $ this ->assertSame ([
1004
+ "https://example.com/ $ buildDir/assets/app.versioned.css " => [
1005
+ 'rel="preload" ' ,
1006
+ 'as="style" ' ,
1007
+ ],
1008
+ "https://example.com/ $ buildDir/assets/app.versioned.js " => [
1009
+ 'rel="modulepreload" ' ,
1010
+ ],
1011
+ "https://example.com/ $ buildDir/assets/import.versioned.js " => [
1012
+ 'rel="modulepreload" ' ,
1013
+ ],
1014
+ ], ViteFacade::preloadedAssets ());
1015
+
1016
+ $ this ->cleanViteManifest ($ buildDir );
1017
+ }
1018
+
868
1019
public function testPreloadAssetsGetAssetNonce ()
869
1020
{
870
1021
$ buildDir = Str::random ();
0 commit comments