В моем vars.scss
есть переменная, к которой я хочу получить доступ из Javascript в root/app/app.vue
.
корень / приложение / СКС / vars.scss
:export {
cursor: #fff;
}
корень / приложение / app.vue
<template>
<div id="yes">
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import colors from '@/scss/vars.scss';
export default Vue.extend({
mounted() {
console.log(colors.cursor);
},
});
</script>
<style >
</style>
Я прочитал приблизительно 30 различных вопросов о стековом потоке, которые, кажется, имеют дело с аналогичной проблемой импорта переменных в блок style
файла .vue
, а также с идентичной проблемой импорта переменных непосредственно в Javascript код. В результате мой webpack.config.js
выглядит следующим образом:
корень / webpack.config.js
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
const env = process.env.NODE_ENV
module.exports = {
entry: './app/index.ts',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'staticfiles')
},
resolve: {
extensions: [ '.ts', '.js', '.vue', '.scss', '.sass'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': path.resolve(__dirname, '/app/')
}
},
plugins: [
new HtmlWebpackPlugin(),
new CleanWebpackPlugin(),
new webpack.HotModuleReplacementPlugin(),
new VueLoaderPlugin()
],
module: {
rules: [
{
enforce: 'pre',
test: /\.(js|vue|ts)$/,
loader: 'eslint-loader',
exclude: /node_modules/
},
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
// Since sass-loader (weirdly) has SCSS as its default parse mode, we map
// the "scss" and "sass" values for the lang attribute to the right configs here.
// other preprocessors should work out of the box, no loader config like this necessary.
'scss': 'vue-style-loader!css-loader!sass-loader',
'sass': 'vue-style-loader!css-loader!sass-loader?indentedSyntax',
}
// other vue-loader options go here
}
},
{
test: /\.css$/,
use: [
'vue-style-loader',
'css-loader'
]
},
{
test: /\.tsx?$/,
loader: 'ts-loader',
exclude: /node_modules/,
options: {
appendTsSuffixTo: [/\.vue$/],
}
},
{
test: /\.(png|jpg|gif|svg)$/,
loader: 'file-loader',
options: {
name: '[name].[ext]?[hash]'
}
},
{
test: /\.s(a|c)ss$/,
use: [ {
loader: "style-loader",
options: {
sourceMap: env === 'development',
}
}, {
loader: "css-loader",
options: {
sourceMap: env === 'development',
}
}, {
loader: "sass-loader",
options: {
sourceMap: env === 'development',
}
},
'vue-style-loader'],
}]
}
};
В разделе test: /\.s(a|c)ss$/
я также попытался поместить vue-style-loader
в начало массива.
Я пробовал много комбинаций имен файлов при попытке импортировать файл .scss
, например, относительный (../scss/vars.scss
), удаление расширения, использование .css
в качестве расширения и т. Д.
Я получаю ошибку:
ERROR in /home/Documents/application/app/app.vue.ts
[tsl] ERROR in /home/Documents/application/app/app.vue.ts(10,28)
TS2307: Cannot find module '@/scss/vars.scss'.
Мой вопрос:
В проекте, который использует vue-style-loader
и vue-loader
для создания .vue
файлов с помощью веб-пакета, как я могу импортировать .scss
переменные в часть <script>
файла .vue
? (обратите внимание - я НЕ пытаюсь импортировать их в раздел <style>
файла .vue
)