プロジェクトの任意のファイルに2種類のファイルをインポートできるようにしたい。
import 'styles/index.scss';
import 'styles/build/_style.css'
Nextjs 7とwebpack 4を使用していることに注意することが重要です(nextjs7に付属)
Nextjs 6では、next.config.jsで使用していました
const withCSS = require('@zeit/next-css')
const withSass = require('@zeit/next-sass')
const commonsChunkConfig = (config, test = /\.css$/) => {
config.plugins = config.plugins.map(plugin => {
if (
plugin.constructor.name === 'CommonsChunkPlugin' &&
plugin.minChunks != null
) {
const defaultMinChunks = plugin.minChunks;
plugin.minChunks = (module, count) => {
if (module.resource && module.resource.match(test)) {
return true;
}
return defaultMinChunks(module, count);
};
}
return plugin;
});
return config;
};
module.exports = withCSS(withSass({
webpack: (config, { isServer }) => {
config = commonsChunkConfig(config, /\.(sass|scss|css)$/)
return config
}
}))
このようにプロジェクトを初期化すると、SCSS CSS PNG SVG TTFが含まれます。
npm install withSass@canary withCSS@canary node-sass
//next.config.js
const withSass = require('@zeit/next-sass');
const withCSS = require("@zeit/next-css");
module.exports = withCSS(withSass({
webpack (config, options) {
config.module.rules.Push({
test: /\.(png|jpg|gif|svg|eot|ttf|woff|woff2)$/,
use: {
loader: 'url-loader',
options: {
limit: 100000
}
}
});
return config;
}
}));
next-compose-plugins
を使用してください。
next.js
構成を作成するためのよりクリーンなAPIを提供します。@zeit/next-css
をインストールする必要はなく、動作させるためにwebpack loader
構成を行う必要もありません。
デモ用の@zeit/next-source-maps
プラグインの例を次に示します。
/* Import modules */
const withSourceMaps = require( '@zeit/next-source-maps' );
const withSass = require( '@zeit/next-sass' );
const withPlugins = require( 'next-compose-plugins' );
/* Configuration */
const NextAppConfig = ({
// config stuff goes here, no webpack loader config required
})
/* Export declaration */
module.exports = withPlugins([
[ withSourceMaps ],
[ withSass ]
], NextAppConfig );
セットアップがさらにクリーンであるため、エクスポートの前に配列を宣言することをお勧めします。
// ... imports go here
/* Plugins array variable */
var plugins = [ [ withSourceMaps ], [ withSass ] ];
/* CONFIGURATION */
const NextAppConfig = ({
// Config stuff goes here, no webpack configuration required
})
/* EXPORT DECLARATION */
module.exports = withPlugins( plugins, NextAppConfig );
外部パッケージ(node_modules内)を使用している人のために、次の9.3.0で動作するCSS + SASSソリューションを示します。 SASSを介したCSSの標準インポートが含まれます。この例では、videojsを使用しています。
package.json
"dependencies": {
"@zeit/next-sass": "^1.0.1",
"next": "^9.3.0",
"next-absolute-url": "^1.2.2",
"node-sass": "^4.13.1",
"react": "^16.13.0",
"react-dom": "^16.13.0",
"video.js": "^7.7.5"
},
next.config.js:
const withSass = require("@zeit/next-sass");
module.exports = withSass({
assetPrefix: process.env.NEXT_BASE_PATH || '',
exportTrailingSlash: true,
exportPathMap: function() {
return {
'/': { page: '/' }
};
}
});
外部CSSを必要とするコンポーネント「VideoPlayer.jsx」
import './VideoPlayer.scss';
VideoPlayer.scss:
@import '~video.js/dist/video-js.css';