tl; dr
Я частично объяснил, как это сделать, и понял, что это будет полезная утилита. Я создал пакет для этого: svelte-sequence-preprocessor .
// rollup.config.js
import svelte from 'rollup-plugin-svelte';
import seqPreprocessor from 'svelte-sequential-preprocessor'
import autoPreprocess from 'svelte-preprocess'
import image from 'svelte-image'
export default {
...,
plugins: [
svelte({
preprocess: seqPreprocessor([ autoPreprocess(), image() ])
})
]
}
Explaination
Пример использования препроцессора в документации предназначен для использования препроцессора функционировать как отдельная утилита. Чтобы использовать собственный препроцессор со сверткой, вы должны сделать что-то вроде этого:
export default {
...,
plugins: [
svelte({
preprocess: {
markup: ({ content, filename }) => myPreprocess(content)
}
})
]
}
Примечание: Содержимое, переданное в markup()
, будет полным стройным файлом, представленным как string.
Однако, даже если принять это во внимание, ваше предложение не будет работать так, как вы его описали. Проблема в том, что препроцессоры стилей получают стили только как контент. svelte-image
нужен полный компонент Svelte, который и получает markup()
.
Если вы сделаете одну последнюю настройку, вы сможете заставить его работать. Вместо того, чтобы пытаться вызывать препроцессоры на разных этапах, вы можете заставить каждый препроцессор пройти все этапы перед вызовом следующего, используя функцию предварительной обработки из библиотеки, на которую вы ссылались выше. Полный пример можно найти здесь , но вот базовая c схема logi c.
export default {
...,
plugins: [
svelte({
preprocess: {
markup: async ({ content, filename }) => {
const processed = await svelte.preprocess(content, autoPreprocess({ options }), { filename });
// Handle return value and repeat for other preprocessors
return {
code: ...,
dependencies: ...
};
}
})
]
}