When developing the project with Svelte, I encountered the need to convert PX into REM. I tried postCSS plug-ins such as PostCSS-Px2REM and PostCSS-PxtoREM, but failed. Finally, I found the plug-ins of PostCSS-Units and succeeded in implementing them. The complete rollup configuration files are as follows: 3.3.2 Case to REM The configuration is sapper project configuration
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';
constlegacy = !! 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,
}
};
Copy the code
After the configuration, modify the CSS as follows:
h2 {
font-size: rem(42);
line-height: rem(60);
text-align: center;
}
Copy the code
Original: www.yuedun.wang/blogdetail/…