webpack - 测试期间导入 scss 文件失败
问题描述
我正在尝试在 Vue 组件中导入 scss 文件:
<style lang="scss">
@import "./assets/styles/App.scss";
</style>
它在 dev 和 prod build ( npm run dev
, npm run build
) 上运行良好,但是,它Invalid CSS after "...load the styles": expected 1 selector or at-rule, was "var content = requi"
在测试 ( ) 期间失败 ( npm test
)。我正在使用业力作为跑步者。
我的配置: webpack.test.conf
'use strict'
// This is the webpack config used for unit tests.
const utils = require('./utils')
const webpack = require('webpack')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const webpackConfig = merge(baseWebpackConfig, {
// use inline sourcemap for karma-sourcemap-loader
module: {
rules: utils.styleLoaders({ usePostCSS: true })
},
devtool: '#inline-source-map',
resolveLoader: {
alias: {
'scss-loader': 'sass-loader'
}
},
plugins: [
new webpack.DefinePlugin({
'process.env': require('../config/test.env')
})
]
})
// no need for app entry during tests
delete webpackConfig.entry
module.exports = webpackConfig
webpack.base.conf
[...]
{
test: /\.scss$/,
use: [
'vue-style-loader',
'css-loader',
'sass-loader'
]
}
[...]
业力.conf.js
const webpackConfig = require('../../build/webpack.test.conf');
module.exports = function karmaConfig(config) {
config.set({
browsers: ['ChromeHeadless'],
frameworks: ['mocha', 'sinon-chai'],
reporters: ['spec', 'coverage'],
files: ['./index.js'],
preprocessors: {
'./index.js': ['webpack', 'sourcemap'],
},
webpack: webpackConfig,
webpackMiddleware: {
noInfo: true,
},
coverageReporter: {
dir: './coverage',
reporters: [
{ type: 'lcov', subdir: '.' },
{ type: 'text-summary' },
],
},
});
};
实用程序.js
exports.cssLoaders = function (options) {
options = options || {}
const cssLoader = {
loader: 'css-loader',
options: {
sourceMap: options.sourceMap
}
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
sourceMap: options.sourceMap
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
if (loader) {
loaders.push({
loader: loader + '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}
// Extract CSS when that option is specified
// (which is the case during production build)
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
// https://vue-loader.vuejs.org/en/configurations/extract-css.html
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateLoaders('sass', { indentedSyntax: true }),
scss: generateLoaders('sass'),
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
lang="scss"
在我尝试导入 scss 文件之前,它工作正常(使用)。
我在这里缺少什么?
解决方案
推荐阅读
- python - 是否可以将 pytest-bdd 与 SeleniumBase 一起使用?
- java - 晚上Spring java改算法
- reactjs - 如何使站点 URL 成为 React 应用程序的外部参数?
- linked-list - 这个程序是栈队列和链表的组合
- python - 编写一个接收整数列表的函数,如果它按顺序包含 007,则返回 True - 我的代码不起作用
- python - 使用傅里叶变换找不到信号的频率
- html - 如何使用对本地 JSON 文件的一个请求来填充多个下拉列表,使用 jQuery?
- flutter - 从小部件颤振切割矩形?
- peerjs - 如何以编程方式断开用户与 peerServer 的连接
- python - 数据框中的多个过滤器