Я пытаюсь получить webpack 4 (через проект, который в основном уже настроен с использованием Vue CLI 3 для его начальной загрузки), чтобы связать существующий проект, который в настоящее время использует комбинацию Sprockets / конвейера ресурсов Rails + Require.js .
Фон
В этом проекте много require
операторов, которые выглядят так:
require('css!./styles')
Что в действительности означает в контексте текущего приложения на Rails, так это наличие файла styles.less
(обратите внимание, что это .less
), тогда Sprockets отвечает за то, чтобы существовал styles.css
, такой, что когда Require.js собирает все, он даже не знает, что файл LESS существует.
Что я хочу
Когда веб-пакет видит require('css!./styles')
, он должен искать файл с именем styles.less
, но затем должен соответствовать существующим правилам веб-пакета, которые обрабатывают файлы LESS. Это больше, чем просто один плагин, поскольку соответствующий конфиг (config.module.rule('less')
) находится здесь:
{
// ...
module: {
rules: [
/* config.module.rule('less') */
{
test: /(\.less$)/,
oneOf: [
// ...
/* config.module.rule('less').oneOf('normal') */
{
use: [
/* config.module.rule('less').oneOf('normal').use('vue-style-loader') */
{
loader: 'vue-style-loader',
options: {
sourceMap: false,
shadowMode: false
}
},
/* config.module.rule('less').oneOf('normal').use('css-loader') */
{
loader: 'css-loader',
options: {
sourceMap: false,
importLoaders: 2
}
},
/* config.module.rule('less').oneOf('normal').use('postcss-loader') */
{
loader: 'postcss-loader',
options: {
sourceMap: false
}
},
/* config.module.rule('less').oneOf('normal').use('less-loader') */
{
loader: 'less-loader',
options: {
sourceMap: false
}
}
]
}
]
}
]
}
}
Проблемы, с которыми я сталкиваюсь:
- Как мне сказать, что требуется, чтобы начало с
css!
вызывало приведенное выше правило LESS?
- Как я могу переписать требуемый путь, когда требование начинается с
css!
? И require('css!./styles')
, и require('css!./styles.css')
должны отображаться на styles.less
.
Потенциально связанный: