質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • JavaScript

    16003questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • gulp

    266questions

    gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

  • webpack

    229questions

  • Electron

    191questions

    Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

webpackを使うアプリでSCSSファイルを変換する際まだgulpを使うべきなのでしょうか?

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 557

workr

score 150

Electron アプリケーションで SCSS を CSS に変換したものを使いたいと思っています。
とくに React 等を使うつもりはないので、いわゆる CSS in JS のような形にせず、単に CSS のまま使う予定です。

Electron のビルドに webpack を使うのでインストール済みなのですが、SCSS の変換を webpack でやるべきなのか gulp を使うほうがいいのか迷っています。

webpack で sass-loader, mini-css-extract-plugin などを使えば変換できることを確かめたのですが、現時点ではとくに意味がなさそうな JS ファイル(当環境では style.bundle.js という名称)が一緒に作られるので遠回りなようにも見えてしまいます。(原理がよくわかっていません)

以下は使用した webpack.config.js です。

const path = require('path')
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = [{
  mode: 'development',
  entry: {
    style: './src/assets/sass/app.scss'
  },
  devtool: "source-map",
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'assets/js/[name].bundle.js'
  },
  module: {
    rules: [{
        test: /\.css$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
        ]
      },
      {
        test: /\.scss$/,
        use: [
          MiniCssExtractPlugin.loader,
          {
            loader: 'css-loader',
            options: {
              importLoaders: 1,
            },
          },
          'sass-loader',
        ]
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: "assets/css/[name].css"
    })
  ]
}];

タスクランナーとしての役目は gulp で行ってしまえば余計なファイルが作られる問題はなさそうですが、工夫すれば webpack だけでもやれそうな気がします。このあたりの話題に関しては知識不足なのでこのような処理を行う際どうするのが一般的なのか知りたいです。

よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

私はいつもこの方法でwebpackでSCSSをCSSに変換してます。
module.exportsにjavascript用とcss用を二つ配列で定義してます。
ただ、webpackのバージョンを4系に上げたら動かなくなってしまったので、3系限定の記述になります。
あと、source-mapの行がずれていたり等の挙動もあったりしました。。

// @ts-check
const path = require("path");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const webpack = require("webpack");

module.exports = [
    // typescript -> javascript build
    {
        entry: {
            "app": "./src/typescript/app.ts",
        },
        output: {
            path: path.join(__dirname, "docs"),
            filename: "[name].js",
        },
        devtool: "source-map",
        resolve: {
            modules: [
                path.resolve("./src/typescript"),
                path.resolve("./node_modules")
            ],
            extensions: [".js", ".ts"],
        },
        module: {
            rules: [{
                test: /\.ts?$/,
                use: {
                    loader: "ts-loader",
                    options: {
                        compilerOptions: {
                            "noUnusedLocals": false,
                            "noUnusedParameters": false,
                        }
                    }
                }
            }]
        },
        target: "web"

    },
    // sass -> css build
    {
        context: path.join(__dirname, "src/scss"),
        entry: {
            style: "./main.scss"
        },
        output: {
            path: path.join(__dirname, "docs"),
            filename: "style.css"
        },
        module: {
            rules: [{
                test: /\.scss$/,
                use: ExtractTextPlugin.extract({
                    use: [{
                        loader: "css-loader",
                        options: {
                            minimize: true,
                            sourceMap: true
                        }
                    }, {
                        loader: "sass-loader",
                        options: {
                            sourceMap: true
                        }
                    }]
                })
            }]
        },
        devtool: "source-map",
        plugins: [
            new ExtractTextPlugin({
                filename: "style.css"
            })
        ]
    }
];

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

質問の趣旨を勘違いしていました。
このfilenameの部分を修正すれば、style.bundle.jsは作られなくなると思います。

  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'assets/js/[name].bundle.js'
  },

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/06 12:39

    回答ありがとうございます。filename を plugins で指定されているものと同じにすると上書きされて消えたように見えるという情報をもとに試してみたのですが「Conflict: Multiple assets emit to the same filename」となってしまって無理のようでした。
    (参考: https://stackoverflow.com/questions/29760894/with-webpack-is-it-possible-to-generate-css-only-excluding-the-output-js)

    webpack は 4.x を使用しているのでそのあたりが影響しているのかもしれませんが、具体的にはどのように変更したらいいのでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    16003questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • gulp

    266questions

    gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

  • webpack

    229questions

  • Electron

    191questions

    Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。