1. 程式人生 > 其它 >svelte專案rollup配置px2rem

svelte專案rollup配置px2rem

技術標籤:前端postcssless

使用svelte開發專案時遇到需要將px轉換成rem的需求,有試過postcss-px2rempostcss-pxtorem,等postcss外掛,都沒成成功,最後找到了postcss-units外掛成功實現。
完整rollup配置檔案如下:
converts px to rem
該配置是sapper專案配置

import path from 'path';
import resolve from '@rollup/plugin-node-resolve';
import replace from '@rollup/plugin-replace';
import
commonjs from '@rollup/plugin-commonjs'; import url from '@rollup/plugin-url'; import svelte from 'rollup-plugin-svelte'; import babel from '@rollup/plugin-babel'; import { terser } from 'rollup-plugin-terser'; import config from 'sapper/config/rollup.js'; import pkg from './package.json'; import sveltePreprocess from
'svelte-preprocess'; // import { less } from 'svelte-preprocess'; const postcssUnits = require('postcss-units'); const mode = process.env.NODE_ENV; const dev = mode === 'development'; const legacy = !!process.env.SAPPER_LEGACY_BUILD; const onwarn = (warning, onwarn) => (warning.code === 'MISSING_EXPORT'
&& /'preload'/.test(warning.message)) || (warning.code === 'CIRCULAR_DEPENDENCY' && /[/\\]@sapper[/\\]/.test(warning.message)) || onwarn(warning); export default { client: { input: config.client.input(), output: config.client.output(), plugins: [ replace({ 'process.browser': true, 'process.env.NODE_ENV': JSON.stringify(mode) }), svelte({ dev, hydratable: true, emitCss: true, // preprocess: [ // less(), // ] preprocess: sveltePreprocess({ postcss: { plugins: [ postcssUnits({ size: 75 }), ] }, }), }), url({ sourceDir: path.resolve(__dirname, 'src/node_modules/images'), publicPath: '/client/' }), resolve({ browser: true, dedupe: ['svelte'] }), commonjs(), legacy && babel({ extensions: ['.js', '.mjs', '.html', '.svelte'], babelHelpers: 'runtime', exclude: ['node_modules/@babel/**'], presets: [ ['@babel/preset-env', { targets: '> 0.25%, not dead' }] ], plugins: [ '@babel/plugin-syntax-dynamic-import', ['@babel/plugin-transform-runtime', { useESModules: true }] ] }), !dev && terser({ module: true }), ], preserveEntrySignatures: false, onwarn, }, server: { input: config.server.input(), output: config.server.output(), plugins: [ replace({ 'process.browser': false, 'process.env.NODE_ENV': JSON.stringify(mode) }), svelte({ generate: 'ssr', hydratable: true, dev, // preprocess: [ // less(), // ] preprocess: sveltePreprocess({ postcss: { plugins: [ postcssUnits({ size: 75 }), ] }, }), }), url({ sourceDir: path.resolve(__dirname, 'src/node_modules/images'), publicPath: '/client/', emitFiles: false // already emitted by client build }), resolve({ dedupe: ['svelte'] }), commonjs(), ], external: Object.keys(pkg.dependencies).concat(require('module').builtinModules), preserveEntrySignatures: 'strict', onwarn, }, serviceworker: { input: config.serviceworker.input(), output: config.serviceworker.output(), plugins: [ resolve(), replace({ 'process.browser': true, 'process.env.NODE_ENV': JSON.stringify(mode) }), commonjs(), !dev && terser() ], preserveEntrySignatures: false, onwarn, } };

配置完成後同時需要將css進行修改:

h2 {
	font-size: rem(42);
	line-height: rem(60);
	text-align: center;
}

原文連結:https://www.yuedun.wang/blogdetail/5ff3db095e80c6649222d94e