其实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. 谈谈Nginx-HTTPS加密技术

    超文本传输安全协议(HTTPS)是以安全为目标的HTTP通道,简单来说就是HTTP安全版.https由两个部分组成:HTTP+SSL/TLS,在http基础上加上了一层加密信息模块,服务端和客户端的信 ...

  2. Python select解析

    一.首先列一下,sellect.poll.epoll三者的区别 1.select a.select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监控多个文件描述符的数组,当 ...

  3. 使用element-ui的常见问题

    给组件绑定的事件为什么无法触发?  在 Vue 2.0 中,为自定义组件绑定原生事件必须使用 .native 修饰符: <my-component @click.native="han ...

  4. HtmlTestRunner

    1.一般生成报告时,会使用时间来作为报告名称的一部分,引入time这个第三方,使用以下方式格式化当前时间 下面运行最终结果:2019-03-29-14_29_18------>年-月-日-时-分 ...

  5. HDU5117 Fluorescent 期望 计数 状压dp 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/HDU5117.html 题目传送门 - HDU5117 题意 $T$ 组数据. 给你 $n$ 盏灯 ,$m$ 个 ...

  6. MySQL查询本周、上周、本月、上个月份数据的sql脚本

    2018-11-13 查询今天的数据 select * from 表名 where to_days(时间字段名) = to_days(now()); 查询昨天的数据 SELECT * FROM 表名 ...

  7. Java数组实现循环队列的两种方法

    用java实现循环队列的方法: 1.添加一个属性size用来记录眼下的元素个数. 目的是当head=rear的时候.通过size=0还是size=数组长度.来区分队列为空,或者队列已满. 2.数组中仅 ...

  8. mybatis之级联关系(一对一、一对多)

    0. 表结构 1. 准备工作 1.1 配置文件等信息,请参考  myBatis之入门示例 1.2 entity 1.2.1 TPersonInfo.java package com.blueStarW ...

  9. C# Work PPT to PDF

    //// <summary> /// 把ppt文件转换成pdf文件2 /// </summary> /// <param name="sourcePath&qu ...

  10. Vue初始

    一 .安装   https://cn.vuejs.org/ 官方网站 二 .简单实用示例 Vue.js 使用了基于 HTML 的模板语法,最简单的使用vue的方式是渲染数据,渲染数据最常见的形式就是使 ...