From 81ee26385f691a8644b43540d230071cc422bc78 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 27 Dec 2021 17:40:05 +0800 Subject: [PATCH] fix(nvue): preprocess scss --- packages/uni-cli-shared/lib/package.js | 14 +++++++++----- .../build/css-loader.conf.js | 2 ++ .../packages/sass-loader/dist/index.js | 7 +++++-- .../packages/sass-loader/dist/webpackImporter.js | 9 +++++---- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/packages/uni-cli-shared/lib/package.js b/packages/uni-cli-shared/lib/package.js index 9bec1d1af..b050a2ea3 100644 --- a/packages/uni-cli-shared/lib/package.js +++ b/packages/uni-cli-shared/lib/package.js @@ -1,6 +1,6 @@ const uniI18n = require('@dcloudio/uni-cli-i18n') -function isPlainObject(a) { +function isPlainObject (a) { if (a === null) { return false } @@ -8,7 +8,7 @@ function isPlainObject(a) { } module.exports = { - initCustomScript(name, pkgPath) { + initCustomScript (name, pkgPath) { const pkg = require(pkgPath) const uniAppOptions = pkg['uni-app'] @@ -24,7 +24,9 @@ module.exports = { } if (!scriptOptions.env || !scriptOptions.env.UNI_PLATFORM) { - console.error(uniI18n.__('cliShared.requireConfigUniPlatform', { 0: `package.json->uni-app->scripts->${name}->env ` })) + console.error(uniI18n.__('cliShared.requireConfigUniPlatform', { + 0: `package.json->uni-app->scripts->${name}->env ` + })) process.exit(0) } @@ -32,7 +34,9 @@ module.exports = { Object.keys(uniAppOptions.scripts).forEach(scriptName => { if (scriptName !== name) { const define = uniAppOptions.scripts[scriptName].define - Object.keys(define).forEach(name => define[name] = false) + Object.keys(define).forEach(name => { + define[name] = false + }) Object.assign(scriptOptions.define, define) } }) @@ -46,4 +50,4 @@ module.exports = { return scriptOptions } -} +} diff --git a/packages/vue-cli-plugin-hbuilderx/build/css-loader.conf.js b/packages/vue-cli-plugin-hbuilderx/build/css-loader.conf.js index 8c26e35c9..87bd71ca3 100644 --- a/packages/vue-cli-plugin-hbuilderx/build/css-loader.conf.js +++ b/packages/vue-cli-plugin-hbuilderx/build/css-loader.conf.js @@ -58,6 +58,7 @@ if (isSass) { const scssLoader = { loader: '@dcloudio/vue-cli-plugin-uni/packages/sass-loader', options: { + nvue: true, sourceMap: false } } @@ -65,6 +66,7 @@ const scssLoader = { const sassLoader = { loader: '@dcloudio/vue-cli-plugin-uni/packages/sass-loader', options: { + nvue: true, sourceMap: false } } diff --git a/packages/vue-cli-plugin-uni/packages/sass-loader/dist/index.js b/packages/vue-cli-plugin-uni/packages/sass-loader/dist/index.js index bfdb5e076..95b3e2687 100644 --- a/packages/vue-cli-plugin-uni/packages/sass-loader/dist/index.js +++ b/packages/vue-cli-plugin-uni/packages/sass-loader/dist/index.js @@ -33,6 +33,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de */ function loader(content) { const options = (0, _loaderUtils.getOptions)(this) || {}; + // fixed by xxxxxx + const isNVue = !!options.nvue + delete options.nvue (0, _schemaUtils.default)(_options.default, options, { name: 'Sass Loader', baseDataPath: 'options' @@ -54,7 +57,7 @@ function loader(content) { mainFiles: ['_index', 'index', '...'], extensions: ['.scss', '.sass', '.css', '...'] }); - sassOptions.importer.push((0, _webpackImporter.default)(this.resourcePath, resolve, addNormalizedDependency)); + sassOptions.importer.push((0, _webpackImporter.default)(this.resourcePath, resolve, addNormalizedDependency, isNVue)); } // Skip empty files, otherwise it will stop webpack, see issue #21 @@ -111,4 +114,4 @@ function loader(content) { } var _default = loader; -exports.default = _default; \ No newline at end of file +exports.default = _default; diff --git a/packages/vue-cli-plugin-uni/packages/sass-loader/dist/webpackImporter.js b/packages/vue-cli-plugin-uni/packages/sass-loader/dist/webpackImporter.js index 48a11937e..5a211bc29 100644 --- a/packages/vue-cli-plugin-uni/packages/sass-loader/dist/webpackImporter.js +++ b/packages/vue-cli-plugin-uni/packages/sass-loader/dist/webpackImporter.js @@ -41,10 +41,11 @@ const matchCss = /\.css$/i; const fs = require('fs') const preprocessor = require('../../webpack-preprocess-loader/preprocess/lib/preprocess') const { - cssPreprocessOptions + cssPreprocessOptions, + nvueCssPreprocessOptions } = require('@dcloudio/uni-cli-shared') - -function webpackImporter(resourcePath, resolve, addNormalizedDependency) { +// fixed by xxxxxx +function webpackImporter(resourcePath, resolve, addNormalizedDependency, isNVue) { function dirContextFrom(fileContext) { return _path.default.dirname( // The first file is 'stdin' when we're using the data option fileContext === 'stdin' ? resourcePath : fileContext); @@ -63,7 +64,7 @@ function webpackImporter(resourcePath, resolve, addNormalizedDependency) { if (contents.includes('#endif')) { return { file, - contents: preprocessor.preprocess(contents, cssPreprocessOptions.context, { + contents: preprocessor.preprocess(contents, isNVue ? nvueCssPreprocessOptions.context : cssPreprocessOptions.context, { type: cssPreprocessOptions.type }) } -- GitLab