Vue.js + Webpack + vue-loader + bootstrap-sass + sass-loader
Я только начинаю работу с Vue.js + Webpack + vue-loader + bootstrap-sass + sass-loader, и я немного потерялся.
Что я хотел бы сделать, так это использовать версию bootstrap SASS с моим кодом SPA Vue.js. Я хочу сделать это, чтобы мои настройки бутстрапа можно было сделать с помощью SASS. Вот что я сделал:
- Создал новый проект Vue.js + webpack с vue-cli.
- Установлен бутстрап-сасс и загрузчик.
-
Для сборки /webpack.base.conf.js добавлено следующее:
{ test: /\.scss$/, loaders: [ 'style', 'css', 'sass' ] },
{ test: /\.(woff2?|ttf|eot|svg)$/, loader: 'url', query: { limit: 10000 } }
-
Создан src/style.scss с одной строкой: @import 'bootstrap';
- Добавлена эта строка в начало src/main.js:
import './style.scss'
Когда я теперь запускаю npm run dev
, я получаю следующую ошибку:
ERROR in ./src/main.js
Module not found: Error: Cannot resolve module 'style' in Users/rstuart/Workspace/javascript/kapiche-demo/src
@ ./src/main.js 3:0-25
Я не уверен, почему это не работает.
Также, связанный с этим вопросом, как мне получить доступ к переменным САПР начальной загрузки внутри моих компонентов Vue? Если я понимаю, что здесь происходит, SASS будет скомпилирован в CSS, прежде чем будет включен inline в main.js, то есть нет доступа к каким-либо переменным Bootstrap в моих компонентах. Есть ли способ достичь этого?
Ответы
Ответ 1
Мне удалось решить эту проблему самостоятельно. Вместо того, чтобы пытаться напрямую импортировать style.scss
, я полностью удалил файл, и я заменил элемент <style>
App.vue
следующим образом:
<style lang="sass">
$icon-font-path: "../node_modules/bootstrap-sass/assets/fonts/bootstrap/";
@import '../node_modules/bootstrap-sass/assets/stylesheets/_bootstrap';
.wrapper {
margin-top: $navbar-height;
}
</style>
Это добавляет бонуса к тому, что переменные Bootstrap доступны в блоке стилей компонентов Vue. Кроме того, я полностью удалил { test: /\.scss$/, loaders: [ 'style', 'css', 'sass' ] }
из webpacker.base.conf.js
, но сохранил бит, относящийся к шрифтам. Загрузчик для файлов .vue
уже имеет дело с sass.
Ответ 2
Мне удалось найти подходящий способ:
Вю:
<style lang="sass">
$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
@import "~bootstrap-sass/assets/stylesheets/bootstrap";
</style>
загрузчик конфигурации webpack:
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
},
{
test: /\.scss$/,
loaders: [ 'style-loader', 'css-loader', 'sass-loader' ]
},
{
test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: "url-loader?limit=10000&minetype=application/font-woff"
},
{
test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
loader: "file-loader"
}
Обратите внимание, что я использую bootstrap-sass
, а не по умолчанию boostrap
Ответ 3
Он пытается разрешить модуль style
, указанный вами как загрузчик в этом разделе вашего webpack.base.conf.js:
{ test: /\.scss$/, loaders: [ **'style'**, 'css', 'sass' ] }
Учитывая, что у вас есть css и sass loader, это, вероятно, ошибочная запись, которую вы можете удалить, чтобы начать работу.