Svelte の公式ではビルドする時は rollup 使ってるっぽいのだけど、
Webpack を使ってビルドしてみる。
今回は Webpack の設定だけの記事なので、
他ほとんど割愛。
ファイル構成
node_modules/
package.json
public/
├ css/
├ index.html
└ js/
sass/
└ style.scss
src/
└ main.js
webpack.config.js
インストール
フロントで使うパッケージは割愛。
今回はビルドで使うものだけ。
- svelte-preprocess - svelte ファイル内で sass を書けるようになる。
$ npm install --save-dev css-loader mini-css-extract-plugin node-sass sass-loader style-loader svelte svelte-loader svelte-preprocess webpack webpack-cli
サンプルコード
node_modules/
割愛
package.json
割愛
webpack.config.js
public/js と public/css にそれぞれ
bundle.js と bundle.css をビルドする。
const webpack = require('webpack');
const path = require('path')
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const mode = process.env.NODE_ENV || 'development';
const prod = mode === 'production';
module.exports = {
entry: './src/main.js',
resolve: {
alias: {
svelte: path.dirname(require.resolve('svelte/package.json'))
},
extensions: ['.mjs', '.js', '.svelte'],
mainFields: ['svelte', 'browser', 'module', 'main']
},
output: {
path: path.resolve(__dirname, 'public'),
filename: 'js/bundle.js',
},
module: {
rules: [
{
test: /\.svelte$/,
use: {
loader: 'svelte-loader',
options: {
preprocess: require('svelte-preprocess')({
scss: true,
}),
compilerOptions: {
dev: !prod,
},
emitCss: prod,
hotReload: !prod,
},
},
},
{
test: /\.scss$/i,
exclude: /node_modules/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
url: false,
},
},
{
loader: 'sass-loader',
options: {},
},
],
},
],
},
plugins: [
new webpack.IgnorePlugin({
resourceRegExp: /^\.\/locale$/,
contextRegExp: /moment$/,
}),
new MiniCssExtractPlugin({
filename: 'css/bundle.css',
}),
],
}
public/index.html
割愛
sass/style.scss
割愛
src/main.js
import style from './../sass/style.scss'
省略
.
.
.