const fs = require('fs') const path = require('path') const webpack = require('webpack') const { getPlatformScss, getPlatformSass, nvueCssPreprocessOptions } = require('@dcloudio/uni-cli-shared') const nvueStyleLoader = { loader: '@dcloudio/vue-cli-plugin-hbuilderx/packages/webpack-uni-nvue-loader/lib/style' } const preprocessLoader = { loader: '@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader', options: nvueCssPreprocessOptions } const options = { sourceMap: false } const plugins = [ require('postcss-import')({ resolve (id, basedir, importOptions) { if (id.startsWith('~@/')) { return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3)) } else if (id.startsWith('@/')) { return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2)) } else if (id.startsWith('/') && !id.startsWith('//')) { return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1)) } return id } }), require('@dcloudio/vue-cli-plugin-uni/packages/postcss') ] if (webpack.version[0] > 4) { options.postcssOptions = { plugins } } else { options.parser = require('postcss-comment') options.plugins = plugins } const postcssLoader = { loader: 'postcss-loader', options } // sass ć…šć±€ć˜é‡ const isSass = fs.existsSync(path.resolve(process.env.UNI_INPUT_DIR, 'uni.sass')) const isScss = fs.existsSync(path.resolve(process.env.UNI_INPUT_DIR, 'uni.scss')) let sassData = isSass ? getPlatformSass() : getPlatformScss() if (isSass) { sassData = '@import "@/uni.sass"' } else if (isScss) { sassData = `${sassData} @import "@/uni.scss";` } const scssLoader = { loader: '@dcloudio/vue-cli-plugin-uni/packages/sass-loader', options: { nvue: true, sourceMap: false } } const sassLoader = { loader: '@dcloudio/vue-cli-plugin-uni/packages/sass-loader', options: { nvue: true, sourceMap: false } } scssLoader.options.prependData = sassData scssLoader.options.sassOptions = { outputStyle: 'expanded' } sassLoader.options.prependData = sassData sassLoader.options.sassOptions = { outputStyle: 'expanded', indentedSyntax: true } const lessLoader = { loader: 'less-loader', options: { sourceMap: false } } const stylusLoader = { loader: 'stylus-loader', options: { sourceMap: false, preferPathResolver: 'webpack' } } function createOneOf (preLoader) { const use = [ nvueStyleLoader, preprocessLoader ] use.push(postcssLoader) if (preLoader) { use.push(preLoader) } use.push(preprocessLoader) return [{ resourceQuery: /\?vue/, use }, { use } ] } module.exports = [{ test: /\.css$/, oneOf: createOneOf() }, { test: /\.scss$/, oneOf: createOneOf(scssLoader) }, { test: /\.sass$/, oneOf: createOneOf(sassLoader) }, { test: /\.less$/, oneOf: createOneOf(lessLoader) }, { test: /\.styl(us)?$/, oneOf: createOneOf(stylusLoader) }]