Closed2

Vite で Sass から CSS にトランスパイルする際に、background-imageのパスが解決しない問題

たたたたたた
vite設定
      rollupOptions: {
        input: getHtml(),
        output: {
          entryFileNames: `assets/js/[name].js`,
          assetFileNames(assetInfo) {
            if (assetInfo.name) {
              const cssExtRegex = /\.(css)$/i;
              if (cssExtRegex.test(assetInfo.name)) {
                return `assets/css/css/${assetInfo.name}`;
              }

              const imgExtRegex = /\.(jpe?g|png|svg)$/i;
              if (imgExtRegex.test(assetInfo.name)) {
                return `assets/images/${assetInfo.name}`;
              }

              const movieExtRegex = /\.(mp4)$/i;
              if (movieExtRegex.test(assetInfo.name)) {
                return `assets/movies/${assetInfo.name}`;
              }
            }


            return `assets/${assetInfo.name}`;
          },
        },
      },

assetsFileNamesで、cssを分岐させるとbackgorund-imageのパスが return assets/${assetInfo.name}; の相対パスに設定される。

たたたたたた

rollupOptionsのinputの階層と、outputのdefaultの階層によってbackground-imageのパスが変わる。

つまり下記の部分の階層で決まる。

vite設定
      rollupOptions: {
        input: getHtml(), // inputの階層
        output: {
          entryFileNames: `assets/js/[name].js`,
          assetFileNames(assetInfo) {
            if (assetInfo.name) {
              const cssExtRegex = /\.(css)$/i;
              if (cssExtRegex.test(assetInfo.name)) {
                return `assets/css/css/${assetInfo.name}`;
              }

              const imgExtRegex = /\.(jpe?g|png|svg)$/i;
              if (imgExtRegex.test(assetInfo.name)) {
                return `assets/images/${assetInfo.name}`;
              }

              const movieExtRegex = /\.(mp4)$/i;
              if (movieExtRegex.test(assetInfo.name)) {
                return `assets/movies/${assetInfo.name}`;
              }
            }

            return `assets/${assetInfo.name}`; // outputの階層
          },
        },
      },
このスクラップは2023/08/22にクローズされました