node.js - 使用 gulp 连接来自 JSON 文件的 JS 包
问题描述
在 gulp 和 node 的情况下,我更像是用户而不是开发人员。所以我希望在这里找到一些建议。
我有几个 JSON 文件。每个都定义了一组 JS 文件。我想使用 gulp 或 npm 脚本来循环 JSON 文件并将其中列出的文件连接到 JS 文件。
示例 JSON 文件:
{
"lib": [
"choices.js/public/assets/scripts/choices.min.js"
],
"src": [
"base.js",
"address.js"
]
}
要连接的文件的结果列表应如下所示:
[
'./node_modules/choices.js/public/assets/scripts/choices.min.js',
'./assets/js/src/base.js',
'./assets/js/src/address.js'
]
生成的 JS 文件应存储在 './dist/js/' 中,并像原始 JSON 文件一样命名,除了原因的扩展名。
解决方案
我认为下面的一些技巧对你很有用。特别是glob.sync
,请参阅glob 文档
const gulp = require("gulp");
const glob = require("glob");
const concat = require("gulp-concat");
const path = require("path");
// returns an array, assumes files are named "_something.json"
const jsonFiles = glob.sync("assets/js/_*.json");
function concatJSONfiles(done) {
jsonFiles.forEach(jsonFile => {
let array2Concat = [];
const concatName = path.format({
name: path.basename(jsonFile, ".json"),
ext: ".js"
});
// concatName = "_bundle1.js", "_bumdle2.js", etc.
const thisFile = require(path.join(__dirname, jsonFile)); // get and parse each _bundle<n>.json
// build the array for gulp.src from each key in the _bundle.json's
// if more than the two specified keys ("lib" and "src") just loop through them all
// with the array returned from Objeect.keys(thisFile);
thisFile.lib.forEach(item => array2Concat.push(path.join(".", "node_modules", item)));
thisFile.src.forEach(item => array2Concat.push(path.join(".", "assets", "js", item)));
return gulp.src(array2Concat)
.pipe(concat(concatName))
.pipe(gulp.dest("dist/js"));
});
done();
};
module.exports.concat = concatJSONfiles;
我正在使用这个文件夹结构:
├── assets
| └── js
| ├── address1.js
| ├── address2.js
| ├── base1.js
| ├── base2.js
| ├── _bundle1.json
| └── _bundle2.json
├── gulpfile.js
└── node_modules
└── choices.js
└── public
└── assets
└── scripts
└── choices.min.js
并生产:
├── dist
| └── js
| ├── _bundle1.js
| └── _bundle2.js
推荐阅读
- blazemeter - Taurus Blazemter - 如何在身体中使用功能
- javascript - 为什么我的表单验证功能不起作用?
- ios - 如何使用 Diffable Data Source 和 NSFetchedResultsController 处理 CRUD 操作
- c++ - 寻找二进制补码,
- python - 如何为以下需求创建模型
- architecture - 混合 p2p 程序如何不了解其他同行?
- c++ - 跟踪包含大量 for 循环的项目文件中的变量
- c# - C# Mongo Driver:如何查询列表列表?
- windows - Docker for windows 10 家庭版
- c++ - c++:有没有办法确保编译器调用两次相同的 const 方法得到相同的结果?