- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个项目,其 javascript 文件的结构如下:
我的目标:我想缩小/丑化这些 javascript 文件 在构建输出中,例如每个目录有 1 个缩小文件 .因此,例如,如果我将 js 存储在 bld/js 中的构建输出中,那么在 bld/js 中,我最终会得到文件:dir1.min.js(连接和缩小 fileA.js、fileB.js 的结果)。 js 以及/src/js/dir1/中的所有其他 js 文件)、dir2.min.js(连接和缩小 fileG.js 和 fileN.js 以及/src/dir2/中的所有其他 js 文件的结果) , 等等。
现在 - 我正在使用 grunt 框架生成构建 ,并且必须在 grunt 文件中执行此操作。我是 grunt、node.js 和 javascript 的新手。 我想解释我解决这个问题的思考过程,并且想知道是否有更熟悉这些框架的人可以告诉我我的方法/思考是否是错误的。
据我了解,在 grunt 中做事的主要方法是使用插件。所以我的第一个想法是使用插件来完成这项任务。有一个名为“npm-contrib-uglify”的插件,专门用于缩小。 https://github.com/gruntjs/grunt-contrib-uglify问题是 - 我的理解是,为了做我希望在这里做的事情(每个目录 1 min.js 文件),我需要为每个目录创建特定的任务。所以init看起来像这样:
grunt.initConfig({
uglify: {
dir1: {
files: {
'dest/js/dir1.min.js': ['src/js/dir1/**.js']
}
},
dir2: {
files: {
'dest/js/dir2.min.js': ['src/js/dir2/**.js']
}
},
...
dirN: {
files: {
'dest/js/dirN.min.js': ['src/js/dirN/**.js']
}
},
}
});
var fs = require('fs');
var uglifyJs = require('uglify-js');
grunt.registerTask('minifyMyJs', function(myJsSrcDir) { // myJsSrcDir is an abs. path to the src dir
for (dir in myJsSrcDir): // go through all the dirs.. realize I should use fs.readdir, but just use pseudocode here to give the idea
var minifiedOutputFileName = fs.basename(dir); // to get dir1 from /src/js/dir1
var minified = uglifyJs.Minify(["**.js"]);
fs.writeFile(minifiedOutputFileNam, result.code, function(err)) {
if(err) {
... error checking...
}
}
}
}
最佳答案
想法
am I just thinking about this in the completely wrong way?
Is the whole point of grunt to avoid coding things like this in node.js (and so I'm defeating the purpose by doing this?
npm-scripts
)时减少了处理构建的开发时间。结合
nodejs
.
grunt-contrib-uglify
),然后经过一些修补后发现它满足了我 90% 的要求,但剩下的 10% 却惨遭失败。但是,在使用/集成任何开源包/模块时经常会出现这种情况……可以这么说,您仍然必须填补空白!
gruntjs
并进入
nodejs
只有开发模式,(再次重申我对任何方法都没有偏见),我建议您检查一些 grunts 功能,例如:
uglify
中所展示的那样您问题中的配置。您已包含三个名为
dir1
的目标,
dir2
, 和
dirN
.
grunt-contrib-uglify
是多任务并记住我之前列出的 grunt 功能......使用 grunt 满足您的要求的一种方法是:
grunt.file.expand
获取每个 .js 文件的父文件夹的路径。 files
uglify
的每个目标的配置任务。 uglify
使用 grunt.config
的具有多个目标的任务然后使用 grunt-task.run
运行任务. module.exports = function (grunt) {
'use strict';
grunt.initConfig({
uglify: {
// <-- Intentionally blank, will be dynamically generated.
}
});
/**
* 1. Helper custom Task to dynamically configure and run the uglify task.
*/
grunt.registerTask('myUglify', 'Configures uglify task', function () {
var srcDirGlob = 'src/js/**/*.js';
var destDir = 'dist/js/';
var config = {};
// 2. Get the paths to the parent diretory of each .js file.
var paths = grunt.file.expand({ filter: 'isFile' }, srcDirGlob)
.map(function (_path) {
return _path.substring(0, _path.lastIndexOf("/"));
});
// 3. Filter paths Array to only unique directory paths.
paths.filter(function(_path, pos){
return paths.indexOf(_path) === pos;
})
// 4. Dynamically create the `files` configuration for each Target.
.forEach(function(_path, index) {
var dirName = _path.substring(_path.lastIndexOf('/') + 1);
var destPath = destDir + dirName + '.min.js';
var srcGlob = _path + '/*.js';
config[index] = {
files: {}
}
config[index].files[destPath] = srcGlob;
});
// NOTE: The dynamically created `config` object is now something like this:
//
// config: {
// 0: {
// files: {
// 'dist/js/dir1.min.js': 'src/js/dir1/**.js'
// }
// },
// 1: {
// files: {
// 'dist/js/dir2.min.js': 'src/js/dir2/**.js'
// }
// },
// ...
// }
// 5. Configure the uglify task with multiple Targets
// (i.e. the `config` object) and then run the Task.
grunt.config('uglify', config);
grunt.task.run(['uglify']);
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ["myUglify"]);
};
结果
$ grunt
通过 CLI 使用
Gruntfile.js
上面有
src
目录如下:
.
└── src
└── js
├── dir1
│ ├── fileA.js
│ └── fileB.js
├── dir2
│ ├── fileG.js
│ └── fileN.js
└── dir3
├── fileQ.js
└── fileR.js`
..将连接和
uglify
.js
产生如下目录结构的文件:
.
└── dist
└── js
├── dir1.min.js
├── dir2.min.js
└── dir3.min.js`
注意:源的父文件夹名称
.js
文件用于连接/丑化结果的名称
.js
文件。
Gruntfile.js
中使用的模式/方法(上图)可以根据需要对许多可用的插件进行修改。 关于javascript - Grunt : minify js across project of multiple dirs, 以便每个目录的内容扁平化为单个缩小文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47323641/
这个问题在这里已经有了答案: What's the difference between html[lang="en"] and html:lang(en) in CSS? (4 个答案) 关闭 6
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 9 年前。 Improve t
来自 ./configure --help: --with-zlib=DIR Include ZLIB support (requires zlib >= 1.0.9) --with-zlib-
我正在尝试检查我的 pod 规范并收到以下错误。 [!]“Classes”存储库中的“Classes”Pod 遇到意外版本目录“ios”。 我的源文件夹设置如下: 类 - iOS - 操作系统 Pod
在 Python 中有一个名为 dir 的内置函数。这用于获取对象所有属性的列表。 我了解它的作用,但我对为什么将其称为 dir 感到困惑。这个名称与从对象中获取属性有什么关系? 最佳答案 IIRC
我正在使用以下方法遍历文件夹: Dim file As Variant file = Dir(myFolder) While (file <> "" ) mySub file '
在 Python 的交互式 shell 中,执行 dir() 会打印一个名称列表。但是在脚本中 dir() 不直接提供任何输出,我必须使用 print(dir())。 不仅仅是dir(),其他内置函数
我明白它的作用,并且一直在使用它。但有趣的是,我还没有找到说明“DIR”的实际含义 的文档。 “目录”似乎不对。 这不是“console.log() 和 console.dir() 之间有什么区别?”
我正在尝试使用字符向量在我的工作目录中创建一系列目录。没有递归,只是迭代。没有什么花哨。例如,我可以很容易地做到这一点: lapply(state.name, dir.create) 它在我的工作目录
dir(x) 和 dir(x.__class__) 有什么区别?后者返回不同的属性列表,但与前者重叠。 例如,SQLAlchemy 的 sqlalchemy.create_engine() 函数创建一
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
我正在尝试使用 Dir[] 和/或使用 Dir.foreach 对目录进行 glob: files = Dir["#{options[:dir]}/**/*"].reject { |file| Fil
Git 存储库中.gitignore 文件中的/dir 和/dir/ 有区别吗? 以下有何不同? /dir /dir/ /dir/* 最佳答案 是的,这些规则是不同的。 /dir 将匹配文件、目录、链
我正在尝试编译Bootstrap 5.3以及定制的sass文件。。这就是我的东西。奇怪的是,最后一节生成了下面的css。我预计会看到下面的css。它在开头添加了[dir]。为什么要添加[dir]?我怎
我正在尝试编译Bootstrap 5.3以及定制的sass文件。。这就是我的东西。奇怪的是,最后一节生成了下面的css。我预计会看到下面的css。它在开头添加了[dir]。为什么要添加[dir]?我怎
我正在尝试编译Bootstrap 5.3以及定制的sass文件。。这就是我的东西。奇怪的是,最后一节生成了下面的css。我预计会看到下面的css。它在开头添加了[dir]。为什么要添加[dir]?我怎
你可以找到各种文档来指定 XML 文档内容的语言,使用 xml:lang,如下所示: ... HTML 和 XHTML 具有 dir 属性,可让您指定文本在默认情况下应被视为从左到右,还是默认从右到左
当我 echo 时,输出似乎相同编辑它。 我还测试了其他命令,例如 open ,但两者的结果是一样的。 最佳答案 在传统 sh -style 模式匹配,*匹配文件名中的零个或多个字符,因此 * 之间没
我想在不同时间将一个目录复制到另一个目录中。每次,我都希望新名称比以前高一个数字/我希望能够获取该数字并将其存储到变量中。 所以如果我有一个: mymaindir /home/user/dirs/ST
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我是一名优秀的程序员,十分优秀!