define(['require', './normalize'], function(req, normalize) {
var cssAPI = {};
var isWindows = !!process.platform.match(/^win/);
function compress(css) {
if (config.optimizeCss == 'none') {
return css;
}
if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
try {
var csso = require.nodeRequire('csso');
}
catch(e) {
console.log('Compression module not installed. Use "npm install csso -g" to enable.');
return css;
}
var csslen = css.length;
try {
css = csso.justDoIt(css);
}
catch(e) {
console.log('Compression failed due to a CSS syntax error.');
return css;
}
console.log('Compressed CSS output to ' + Math.round(css.length / csslen * 100) + '%.');
return css;
}
console.log('Compression not supported outside of nodejs environments.');
return css;
}
//load file code - stolen from text plugin
function loadFile(path) {
if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
var fs = require.nodeRequire('fs');
var file = fs.readFileSync(path, 'utf8');
if (file.indexOf('\uFEFF') === 0)
return file.substring(1);
return file;
}
else {
var file = new java.io.File(path),
lineSeparator = java.lang.System.getProperty("line.separator"),
input = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(file), 'utf-8')),
stringBuffer, line;
try {
stringBuffer = new java.lang.StringBuffer();
line = input.readLine();
if (line && line.length() && line.charAt(0) === 0xfeff)
line = line.substring(1);
stringBuffer.append(line);
while ((line = input.readLine()) !== null) {
stringBuffer.append(lineSeparator).append(line);
}
return String(stringBuffer.toString());
}
finally {
input.close();
}
}
}
function saveFile(path, data) {
if (typeof process !== "undefined" && process.versions && !!process.versions.node && require.nodeRequire) {
var fs = require.nodeRequire('fs');
fs.writeFileSync(path, data, 'utf8');
}
else {
var content = new java.lang.String(data);
var output = new java.io.BufferedWriter(new java.io.OutputStreamWriter(new java.io.FileOutputStream(path), 'utf-8'));
try {
output.write(content, 0, content.length());
output.flush();
}
finally {
output.close();
}
}
}
//when adding to the link buffer, paths are normalised to the baseUrl
//when removing from the link buffer, paths are normalised to the output file path
function escape(content) {
return content.replace(/(["'\\])/g, '\\$1')
.replace(/[\f]/g, "\\f")
.replace(/[\b]/g, "\\b")
.replace(/[\n]/g, "\\n")
.replace(/[\t]/g, "\\t")
.replace(/[\r]/g, "\\r");
}
// NB add @media query support for media imports
var importRegEx = /@import\s*(url)?\s*(('([^']*)'|"([^"]*)")|\(('([^']*)'|"([^"]*)"|([^\)]*))\))\s*;?/g;
var absUrlRegEx = /^([^\:\/]+:\/)?\//;
// Write Css module definition
var writeCSSDefinition = "define('@writecss', function() {return function writeCss(c) {var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));};});";
var siteRoot;
var baseParts = req.toUrl('base_url').split('/');
baseParts[baseParts.length - 1] = '';
var baseUrl = baseParts.join('/');
var curModule = 0;
var config;
var writeCSSForLayer = true;
var layerBuffer = [];
var cssBuffer = {};
cssAPI.load = function(name, req, load, _config) {
//store config
config = config || _config;
if (!siteRoot) {
siteRoot = path.resolve(config.dir || path.dirname(config.out), config.siteRoot || '.') + '/';
if (isWindows)
siteRoot = siteRoot.replace(/\\/g, '/');
}
//external URLS don't get added (just like JS requires)
if (name.match(absUrlRegEx))
return load();
var fileUrl = req.toUrl(name + '.css');
if (isWindows)
fileUrl = fileUrl.replace(/\\/g, '/');
// rebase to the output directory if based on the source directory;
// baseUrl points always to the output directory, fileUrl only if
// it is not prefixed by a computed path (relative too)
var fileSiteUrl = fileUrl;
if (fileSiteUrl.indexOf(baseUrl) < 0) {
var appRoot = req.toUrl(config.appDir);
if (isWindows)
appRoot = appRoot.replace(/\\/g, '/');
if (fileSiteUrl.indexOf(appRoot) == 0)
fileSiteUrl = siteRoot + fileSiteUrl.substring(appRoot.length);
}
//add to the buffer
cssBuffer[name] = normalize(loadFile(fileUrl), fileSiteUrl, siteRoot);
load();
}
cssAPI.normalize = function(name, normalize) {
if (name.substr(name.length - 4, 4) == '.css')
name = name.substr(0, name.length - 4);
return normalize(name);
}
cssAPI.write = function(pluginName, moduleName, write, parse) {
var cssModule;
//external URLS don't get added (just like JS requires)
if (moduleName.match(absUrlRegEx))
return;
layerBuffer.push(cssBuffer[moduleName]);
if (!global._requirejsCssData) {
global._requirejsCssData = {
usedBy: {css: true},
css: ''
}
} else {
global._requirejsCssData.usedBy.css = true;
}
if (config.buildCSS != false) {
var style = cssBuffer[moduleName];
if (config.writeCSSModule && style) {
if (writeCSSForLayer) {
writeCSSForLayer = false;
write(writeCSSDefinition);
}
cssModule = 'define(["@writecss"], function(writeCss){\n writeCss("'+ escape(compress(style)) +'");\n})';
}
else {
cssModule = 'define(function(){})';
}
write.asModule(pluginName + '!' + moduleName, cssModule);
}
}
cssAPI.onLayerEnd = function(write, data) {
if (config.separateCSS && config.IESelectorLimit)
throw 'RequireCSS: separateCSS option is not compatible with ensuring the IE selector limit';
if (config.separateCSS) {
var outPath = data.path.replace(/(\.js)?$/, '.css');
console.log('Writing CSS! file: ' + outPath + '\n');
var css = layerBuffer.join('');
process.nextTick(function() {
if (global._requirejsCssData) {
css = global._requirejsCssData.css = css + global._requirejsCssData.css;
delete global._requirejsCssData.usedBy.css;
if (Object.keys(global._requirejsCssData.usedBy).length === 0) {
delete global._requirejsCssData;
}
}
saveFile(outPath, compress(css));
});
}
else if (config.buildCSS != false && config.writeCSSModule != true) {
var styles = config.IESelectorLimit ? layerBuffer : [layerBuffer.join('')];
for (var i = 0; i < styles.length; i++) {
if (styles[i] == '')
return;
write(
"(function(c){var d=document,a='appendChild',i='styleSheet',s=d.createElement('style');s.type='text/css';d.getElementsByTagName('head')[0][a](s);s[i]?s[i].cssText=c:s[a](d.createTextNode(c));})\n"
+ "('" + escape(compress(styles[i])) + "');\n"
);
}
}
//clear layer buffer for next layer
layerBuffer = [];
writeCSSForLayer = true;
}
return cssAPI;
});
相关推荐
JSBuilder2介绍及应用范例
NULL 博文链接:https://cgs1999.iteye.com/blog/2109695
requirejs结合text.js及css.js等插件实现模块依赖开发(打包案例)
序 本文基于requirejs结合text插件实现模块化(打包案例) 的基础上,加入了css样式的导入与打包功能。具体案例如下: css.js、css-build.js、normalize.js下载 下载地址:https://github.com/guybedford/require-css bower下载命令: $ bower install require-css 在下载后...
ExtJs使用的JavascriptBuilder工具
ExtJs使用的JavascriptBuilder工具
使用CSS & Style Builder模式提升Blazor组件的样式构建效率
使用CSS & Style Builder模式提升Blazor组件的样式构建效率 在为ASP.NET Razor Components构建复杂组件时,经常需要结合多种因素生成CSS类。这些类可能由系统状态、组件状态、公共参数和静态基础CSS类共同决定。然而,这种方式并不利于扩展和理解。为了解决这个问题,我们引入了CSS Builder模式,它提供了一种易于重复使用、易于阅读的方法,适用于项...
Laravel开发-laravel-contentbuilderjs
Laravel开发-laravel-contentbuilderjs Laravel的内容生成器包
摄像机实时接入分析平台视频分析网关AI智能分析智慧营业厅方案
通过智能化的改造,可以提高营业厅的运营效率,降低运营成本,同时提升客户体验和安全保障。
用 requirejs 的 R.js 打包css + js
最近用requirejs做了一个项目,实现了模块化的开发方式,通过声明将依赖引入,有效的管理了各个模块之间的依赖关系,开发也有条不紊的进行,但是最近要上线,就面临着一个打包的问题,因为js模块化,导致js文件很多,所以要将其压缩成一个文件。 一、压缩js 1、首先你要先有nodejs环境,没有可以去装一个 2、你得下载R.js 3、新建一个build.js ({ baseUrl: ...
Python-uiautomator2保姆级安装指南:从环境配置到设备连接全流程
本文提供Python-uiautomator2的保姆级安装指南,涵盖从环境配置到设备连接的全流程。详细介绍了Python 3.6+、ADB工具等核心组件的准备,以及uiautomator2的安装和设备端服务初始化步骤,帮助开发者快速搭建Android自动化测试环境,避免常见问题。
C#中的Builder模式
其实就是需要什么创建什么,把需要的东西组装起来,接下类是实例比如创建一个人物模型,在游戏开发中人物可以进行组装。 创建一个人物基类 //人物基类 public class RoleBase { 在unity中都是以object表示 public Object Head { get; set; } public Object Arm { get; set; } p
别再手动算LLC了!用Mathcad 15分钟搞定谐振参数与增益曲线(附已验证产品案例)
本文详细介绍了如何利用Mathcad在15分钟内高效完成LLC谐振变换器的参数计算与增益曲线绘制。通过对比传统工具,突出Mathcad在自然数学表达、实时单位换算和动态参数关联方面的独特优势,帮助电源工程师大幅提升设计效率。文章还提供了已验证的产品案例和实用模板,助力工程师快速掌握谐振参数优化技巧。
Fluent基于低氧舱气体交换仿真(氮气与空气混合)
一、背景概述 模拟低氧舱充氮气和排除混合气体的过程,假设注入95%的氮气,舱内原有气体为空气,压力为标准大气压,温度为300K。观察气体注入过程中,舱内平均氮气和氧气浓度的变化。 二、Fluent设置 Setup 1、General type选择压力基 绝对速度 瞬态 重力勾选 2、Model 能量方程开启 组分运输开启,设置方法如下: 选择后OK,view就会变成Edit,点击Edit。然后再次点击Edit。 将组分中的非氮气氧气和空气的气体移除,右边选项需要将空气放在最后一位。 3、Materi
react中npm run build打包后对应的js和css找不到
react中npm run build打包后对应的js和css找不到,解决方法: 在package.json中加入"homepage": "./",即可解决此问题。
绕过限制?实测修改UA在PC端运行微信小程序的可行性及风险
本文探讨了通过修改User-Agent(UA)在PC端运行微信小程序的技术可行性及风险。分析了小程序设备限制的技术原理,包括`wx.getSystemInfo`API和UA检测机制,并提供了多种修改方案及其局限性。同时强调了潜在的安全和法律风险,推荐使用官方模拟器或安卓模拟器等更安全的替代方案。
Webstudio Visual Builder 模块化 CSS 方案:CSS-in-JS 与 CSS Modules 实践
你是否还在为大型前端项目中的 CSS 冲突、样式覆盖问题头疼?是否在团队协作时因样式命名不规范而效率低下?Webstudio Visual Builder 作为现代可视化开发工具,采用模块化 CSS 方案彻底解决了这些痛点。本文将带你深入了解其采用的 CSS-in-JS 与 CSS Modules 双轨实践,读完你将掌握:两种方案的技术原理、项目中的具体实现路径、以及如何根据场景选择合适的样式方案...
Android OTA 更新面试题及参考答案
OTA 更新即空中下载技术(Over-the-Air Technology)更新,是一种通过无线网络对移动设备的系统软件或应用程序进行远程更新的技术手段。其原理是设备通过移动网络或 Wi-Fi 连接到服务器,服务器检测设备上可更新的软件版本,当有新的版本时,将更新包发送到设备上。设备接收后,在后台自动完成更新包的下载、安装等一系列操作,无需用户手动下载完整的系统镜像或应用安装包并通过数据线等方式进行安装。例如,当手机厂商推出新的安卓系统版本或安全补丁时,就会通过 OTA 方式推送给用户。
AD22等长布线规则
本文介绍了PCB布线中实现信号线等长的详细操作步骤:1.创建网络类(NetClass),将需要等长的信号线归入同一组;2.设置高速布线规则(High-SpeedRule),定义等长容差等参数;3.进行交互式等长布线(InteractiveLengthTuning),使用蛇形线调整线长;4.实时调整与最终检查,确保所有网络满足等长要求。文中还提供了实用技巧,如使用快捷键调整蛇形线参数、为关键信号设置更严格规则等。操作需在PCB设计软件中完成,通过统一管理、规则设置和精确调整来实现信号同步传输。
android kotlin 与 js 交互
不喜欢说太多,喜欢直接干,直接上代码,这才是我的风格。 fragment package com.meinong.fragment.kotlin import android.content.Intent import android.content.pm.PackageManager import android.os.Bundle import android.view.Layout
《RT-DETR魔术师》专栏介绍 & 优快云独家改进创新实战 & 专栏目录
通过本专栏的阅读,后续你也可以自己魔改网络,在网络不同位置(Backbone、head、neck、loss等)进行魔改,实现创新!!!
在没有前端Web HTML,CSS,JavaScript技术知识情况下使用Delphi / C ++ Builder快速开发构建Web前端B/S应用
对标题感到惊讶?是的,如果您不了解HTML,CSS,JavaScript,则可以使用某些Client / Server(FullStack)或Client-Focused第三方Web框架从Delphi / C ++ Builder构建Web前端。想知道这些框架是如何做到的?这篇文章将帮助您理解。 Delphi intraweb结合Cesium开发WEBGIS前端 Web前端框架的功能是什么:视觉布局在IDE中设计,可以在浏览器中使用HTML,Javascript和CSS进行呈现。 使用Delphi或
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
使用JS Builder 完成css,js压缩
1.下载js builder压缩包. 2.项目中建立jsb2文件,test.js.jsb2 { "projectName":"ehallService", "deployDir":"ehallService-t249-5540", "licenseText":"", "pkgs&
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
AssetGraph-Builder 项目推荐
AssetGraph-Builder 项目推荐 项目基础介绍和主要编程语言 AssetGraph-Builder 是一个基于 AssetGraph 的构建系统,主要用于单页 Web 应用程序和网页的优化。该项目的主要编程语言是 JavaScript,它利用 Node.js 环境来执行构建和优化任务。 项目核心功能 AssetGraph-Builder 提供了多种核心功能,旨在优化和简化 Web 应...
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
css js写在一起 vue_Vue模板、JS、CSS分离实现
Vue.js文件默认由template、style、script三种标签将HTML、CSS、JS混合到一个文件当中。这种模式有它一定的优势,即:当单个VUE文件如果样式、逻辑、模板相对简单时以上结构能很大程度上降低逻辑复杂度,页面功能和整体结构也一目了然。但是,当页面功能内容偏多,交互逻辑复杂,模板嵌套多层时将会出现如下图这种况。几百上千行的代码杂柔在一个文件中,当涉及到重构,维护时将会是个焦油坑...
如何使用NW.js构建桌面应用程序
虽然在使用 NW.js 进行桌面应用程序开发时,您需要了解一些新的概念和工具,但这种方法比传统的桌面应用程序开发更容易,因为您可以使用熟悉的 Web 技术进行开发。在此代码中,我们定义了一个名为 `myapp` 的应用程序,并指定了 `index.html` 文件作为应用程序的入口点。在根目录中,您还需要创建一个名为 `index.html` 的文件,其中包含应用程序的界面和逻辑。在应用程序的根目录中,您需要创建一个名为 `package.json` 的文件,其中包含应用程序的元数据和依赖项。
Electron快速上手
Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。嵌入和到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。
Tailwind CSS 深度定制:让 Hugo Blox Builder 界面风格完全由你掌控
Hugo Blox Builder 是一款免费开源的零代码网站构建器,而它的 `blox-tailwind` 模块把整个界面样式交给了 Tailwind CSS 工具类体系。本文带你走完 4 个定制入口——**一行配置换主题色、CSS 变量调色板、tailwind.config.js 设计系统、构建脚本**——让你无需写一行复杂 CSS,就能完全掌控网站的视觉风格与深色模式。 [


被折叠的 条评论
为什么被折叠?



