webpack Import 动态文件
其实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 动态文件的更多相关文章
- Vue系列之 => webpack处理样式文件
处理css文件 安装 npm i style-loader css-loader -D main.js import $ from 'jquery' //Es6中导入模块的方式 import './c ...
- 使用webpack打包js文件(隔行变色案例)
使用webpack打包js文件(隔行变色案例) 1.webpack安装的两种方式 运行npm i webpack -g全局安装webpack,这样就能在全局使用webpack的命令 在项目根目录中运行 ...
- webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件
一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...
- php Yaf_Loader::import引入文件报错的解决方法
php Yaf_Loader::import引入文件报错的解决方法 改下配置文件就行<pre>yaf.use_spl_autoload=1</pre> 也可以PHP动态修改 毕 ...
- webpack抽取CSS文件与CSSTreeShaking
webpack抽取CSS文件 CSSTreeShaking 一.webpack抽取CSS文件 抽取CSS文件的插件:mini-css-extract-plugin npm install --save ...
- 跟我一起学习webpack输出动态HTML(三)
跟着之前的项目来 我们没打包一次就会生成一个bundile.js,我们要更新最新的代码不希望有缓存,那么这个时候我们就是更改资源的URL, 每当代码发生变化时,相应的hash也会发生变化.这个时候我们 ...
- webpack(5)webpack处理css文件
css文件处理-准备工作 (以下项目配置都是基于上一篇webpack(4)的基础上) 在项目开发中,我们必然需要添加很多的样式,而样式我们往往写到一个单独的文件中. 这里我们就在src目录中创建一个n ...
- 【JavaScript】 Webpack安装及文件打包
背景 最近开启一个新项目,需要对前端的各类资源文件进行打包,经过多方调研后,决定使用webpack工具.但是网上的教程多是将webpack直接作为服务器使用,而我只是想将其作为单纯的资源打包工具而已. ...
- webpack教程(二)——webpack.config.js文件
首先我们需要安装一个webpack插件html-webpack-plugin,该插件的作用是帮助我们生成创建html入口文件.执行如下命令 npm install html-webpack-plugi ...
随机推荐
- net core体系-web应用程序-1VS2017构建一个简单的web
使用vs2017,添加一个新项目-asp.net core web应用程序. 结构如图, wwwroot放了网站的静态资源如css.js.image文件: appsetting.json是应用程序的配 ...
- Knn:Knn实现对150朵共三种花的实例的萼片长度、宽,花瓣长、宽数据统计,根据一朵新花的四个特征来预测其种类
from sklearn import neighbors from sklearn import datasets knn = neighbors.KNeighborsClassifier() ir ...
- 20172328《程序设计与数据结构》实验三 敏捷开发与XP实践报告
20172328<程序设计与数据结构>实验三 敏捷开发与XP实践报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强 ...
- 移动端滑屏全应用【四】移动端动画贞动画函数mTween封装
首先此函数是基于大家都知道的Tween动画算法的,在此基础上使用了三中讲到的兼容版动画贞,可以使动画变得更流畅. 1. 首先要记得引入Tween.js 2. 引入mTween.js 3. 调用 * m ...
- web服务搭建
- 利用cookie实现iframe刷新时停留在当前页面
这段时间第一次用iframe,发现问题还挺多,这次主要解决了一个用cookie实现iframe刷新时停留在当前页面,具体步骤如下: 1.必须在每一个页面中记录下当前的url并存入cookie中,具体代 ...
- SpringBoot整合mongoDB
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 这一片文章介绍一个springboot整合mongodb,如果你了解整合mysql之类的 ...
- Scrapy基础(三) ------xpath基础
xpath简介 1,使用路径表达式在xml和html中解析 2,包含标准函数路(所有库支持的xpath语法一致) 3,W3C标准 节点: <body> 第一个节点: <h ...
- ajax 浏览网页等待页面
- 多角度对比 ES5与ES6的区别
ES5与ES6的对比不同点整理 本文关键词:ES6,javascript, 1.Default Parameters(默认参数) es6之前,定义默认参数的方法是在一个方法内部定义 var link ...