其实React Import scss 是非常简单的,比如一般写法import './PromotionPage.scss';,今天遇到一个样式需要覆盖,那么修改后的代码变成了:

import './PromotionPage.scss';

import { config } from "../../../common/config";
if (config.spec == "venetian") {
    import '../../../requirement/venetian/stuff/PromotionPage.scss';
}

很明显程序报错了:'import' and 'export' may only appear at the top level
最后修改为

import { config } from "../../../common/config";
if (config.spec == "venetian") {
import ('../../../requirement/venetian/stuff/PromotionPage.scss');
}

但是在webpack 打包的时候,会把requirement/xxx/stuff/PromotionPage.scss路径下的文件一起打包,会比较麻烦,所以需要在打包前去替换文件中变量,这里的变量也就是一个占位符,

在根目录新建一个prebuild.js文件

var glob = require("glob")
var fs = require("fs"); function readFile(path) {
return fs.readFileSync(path).toString();
}
function writeFile(path, content) {
fs.writeFileSync(path, content, {encoding:"utf8",flag:"w"});
} function readConfig() {
var configContent = readFile("src/common/config.js");
var i = configContent.indexOf("{");
configContent = configContent.substring(i);
return JSON.parse(configContent);
}
var config = readConfig();
const startTag = "//__start";
const endTag = "//__end";
function replaceVariables(content) {
var tag = false;
var ret = "";
var off = ;
while (true) {
var i = content.indexOf(startTag, off);
if (i < ) {
if (tag) {
ret += content.substring(off);
return ret;
} else {
return false;
}
} else {
tag = true;
} var j = content.indexOf("\n", i + startTag.length)
var tem = content.substring(i + startTag.length, j).trim();
tem = tem.replace("#{spec}", config.spec);
var k = content.indexOf(endTag, j); ret += content.substring(off, j) + "\n";
ret += tem + "\n";
off = k;
}
}
glob("src/**/*.js", {}, function (er, files) {
for (var i = ; i < files.length; i++) {
var file = files[i];
var content = readFile(file);
content = replaceVariables(content);
if (content) {
console.log("prebuild中文的" + file);
// console.log(content);
writeFile(file, content);
}
}
});

再修改package.json

  "scripts": {
"prebuild": "node prebuild.js",
"start": "node prebuild.js && webpack-dev-server -d --progress --colors",
"build": " node prebuild.js && webpack --progress --color --verbose --config ./webpack.prd.config.js"
},

使用例子:

//__start import "./themes/#{spec}/skin.scss";
import "./themes/xxx/skin.scss";
//__end

webpack Import 动态文件的更多相关文章

  1. Vue系列之 => webpack处理样式文件

    处理css文件 安装 npm i style-loader css-loader -D main.js import $ from 'jquery' //Es6中导入模块的方式 import './c ...

  2. 使用webpack打包js文件(隔行变色案例)

    使用webpack打包js文件(隔行变色案例) 1.webpack安装的两种方式 运行npm i webpack -g全局安装webpack,这样就能在全局使用webpack的命令 在项目根目录中运行 ...

  3. webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件

    一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...

  4. php Yaf_Loader::import引入文件报错的解决方法

    php Yaf_Loader::import引入文件报错的解决方法 改下配置文件就行<pre>yaf.use_spl_autoload=1</pre> 也可以PHP动态修改 毕 ...

  5. webpack抽取CSS文件与CSSTreeShaking

    webpack抽取CSS文件 CSSTreeShaking 一.webpack抽取CSS文件 抽取CSS文件的插件:mini-css-extract-plugin npm install --save ...

  6. 跟我一起学习webpack输出动态HTML(三)

    跟着之前的项目来 我们没打包一次就会生成一个bundile.js,我们要更新最新的代码不希望有缓存,那么这个时候我们就是更改资源的URL, 每当代码发生变化时,相应的hash也会发生变化.这个时候我们 ...

  7. webpack(5)webpack处理css文件

    css文件处理-准备工作 (以下项目配置都是基于上一篇webpack(4)的基础上) 在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中. 这里我们就在src目录中创建一个n ...

  8. 【JavaScript】 Webpack安装及文件打包

    背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已. ...

  9. webpack教程(二)——webpack.config.js文件

    首先我们需要安装一个webpack插件html-webpack-plugin,该插件的作用是帮助我们生成创建html入口文件.执行如下命令 npm install html-webpack-plugi ...

随机推荐

  1. Kudu的卸载(cdh)

    卸载kudu 1):删除kudu相关包 rm -rf $(find / -name "*kudu*") 2):卸载kudu相关依赖 查询节点的kudu依赖: rpm -qa | g ...

  2. tomcat 反代配置

    tomcat反代可以基于nginx , http进行反代 反代服务器: 有两个网口  反代服务器一般有两块网卡一块处于外网,一块处于内网用于与后端服务器通信 tomcat 节点处于内网地址 1 tom ...

  3. Promise-async-await处理函数

    /*function request() { // 此处的request返回的是一个Promise return new Promise((resolve, reject) => { ajax( ...

  4. 清除DNS缓存(解决能上QQ但是无法上网页问题)

    ipconfig/displaydnsipconfig/flushdns

  5. js隐藏元素

    js隐藏元素 $("#serviceType").css('display','none'); js显示元素 $("#serviceType3").css('d ...

  6. 048 SparkSQL自定义UDAF函数

    一:程序 1.需求 实现一个求平均值的UDAF. 这里保留Double格式化,在完成求平均值后与系统的AVG进行对比,观察正确性. 2.SparkSQLUDFDemo程序 package com.sc ...

  7. 4、Qt Project之串口数据传输

    串口数据传输: Step1:串口数据的发送和接收过程,我们需要单独的添加串口的相关模块进去,模块名称叫做serialport,我们需要建立的工程是QMainWindow的基类程序,不是QWidget程 ...

  8. mybatis中if test 可以使用== != null '' and or 和括号()

    <if test="pd.flag==1 or ((pd.flag==2 or pd.flag==3) and (pd.sfyj==2 or pd.sfyj==3)) or pd.fl ...

  9. RPG

    有排成一行的n个方格,用红(Red).粉(Pink).绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.以上就是著名的RPG难题. 解 ...

  10. Idea中在代码顶部添加自定义作者和时间

    一.在工具栏找到File=>settings=>Editor=>File and Code Templates 二.选择右边的File Header,在编辑框中添加自定义信息,例如: ...