gulp-seajs-trs
Advanced tools
Comparing version 0.2.1 to 1.0.1
234
index.js
var es = require('event-stream'); | ||
var stream = require('stream'); | ||
var gulpUtil = require('gulp-util'); | ||
var UglifyJs = require('uglify-js'); | ||
var PluginError = gulpUtil.PluginError; | ||
var util = require('node-lancer'); | ||
var pluginName = require('./package.json').name; | ||
var util = require('./util.js'); | ||
// var util = require('./util.js'); | ||
var path = require('path'); | ||
var url = require('url'); | ||
function merge (f, t) { | ||
Object.keys(t || {}).forEach(function (key) { | ||
var v = t[key]; | ||
if (undefined != v) { | ||
if (typeof v === 'object') { | ||
f[key] = merge(f[key],v); | ||
} else { | ||
f[key] = v; | ||
} | ||
var getDeps = require('./deps'); | ||
var logger = util.logger; | ||
var debug = util.logger('gulp:seajs:trs'); | ||
var helper = require('./helper'); | ||
exports = module.exports = function (config) { | ||
config = util.extend(true, { | ||
src: '', | ||
dest: "", | ||
base: 'https://g.alicdn.com/', | ||
varName: "", | ||
vars: {}, | ||
paths: { | ||
}, | ||
alias: { | ||
}, | ||
deps: {}, | ||
ignore: [], | ||
mapfile: 'map.js' | ||
}, config); | ||
debug.log(config); | ||
'dest varName src'.split(' ').some(function (name) { | ||
if(!config[name]) { | ||
util.logger.error('config.%s required', name); | ||
process.exit(1); | ||
} | ||
}); | ||
return f; | ||
} | ||
exports = module.exports = function (config) { | ||
var rootdir = process.cwd(); | ||
config = merge({ | ||
alias: {}, | ||
paths: {}, | ||
combo: {}, | ||
base: 'https://g.alicdn.com/ju/', | ||
mapfile: 'map.js', | ||
rootdir: rootdir+'/src/', | ||
name: '', | ||
rename: '', | ||
version: '0.0.0', | ||
charset: 'utf-8', | ||
ignore: [] | ||
}, config); | ||
// 没有配置基础地址,则抛出异常。 | ||
if (!config.base) { | ||
console.error('PluginError: %s config.base invalid.', pluginName); | ||
process.emit('exit', 1); | ||
util.each(config.vars, function (val,name) { | ||
config.vars[name] = val.replace(/^https*:\/\//i,'//'); | ||
}); | ||
util.each(config.paths, function (val,name) { | ||
config.paths[name] = val.replace(/^https*:\/\//i,'//'); | ||
}); | ||
util.each(config.alias, function (val,name) { | ||
config.alias[name] = val.replace(/^https*:\/\//i,'//'); | ||
}); | ||
var prefix = config.vars[config.varName]; | ||
if(!prefix) { | ||
util.logger.error('config.vars["varName"] %s required ', config.varName ); | ||
process.exit(1); | ||
} | ||
// 本地模块重命名 | ||
var packageName = config.rename; | ||
// 发布后的地址 | ||
var baseOnlinePath = config.paths[packageName] = config.paths[packageName] || resolvePath(config.base + '/' + config.name + '/' + config.version); | ||
function resolvePath (dir) { | ||
if (!dir) {return} | ||
var re_protocol = /https{0,1}:\/\//i; | ||
var protocol = dir.match(re_protocol) || []; | ||
return protocol.join('') + dir.replace(re_protocol,'').replace(/\/+/g,'/'); | ||
if (!prefix.match(/^[^\/]+\/[^\/]+\/\d+\.\d+\.\d+$/i)) { | ||
util.logger.warn('vars should contain the %s and must be `${package.group}/${packground.name}/${package.version}', config.varName); | ||
} | ||
function realPath2Id (fullPath) { | ||
var longId = fullPath.replace(config.rootdir, packageName + '/'); | ||
var online = fullPath.replace(config.rootdir, config.base + '/'); | ||
var shortId; | ||
Object.keys(config.alias).some(function (name) { | ||
var alias = config.alias[name]; | ||
if (longId.indexOf(alias) === 0) { | ||
// 别名文件 | ||
if (alias.match(/\.js$/i) && alias === longId) { | ||
shortId = name; | ||
// 文件夹 | ||
} else { | ||
shortId = longId.replace(alias, name + '/'); | ||
} | ||
return true; | ||
} | ||
prefix = '{'+config.varName+'}'; | ||
return es.map(function (file, cb) { | ||
debug.log('start translate ', file.relative); | ||
var ignored = helper.ignore(String(file.relative), config.ignore, { | ||
base: config.src | ||
}); | ||
return { | ||
local: resolvePath(fullPath), | ||
online: resolvePath(online), | ||
longId: resolvePath(longId), | ||
shortId: resolvePath(shortId) | ||
}; | ||
}; | ||
function id2RealPath (id) { | ||
var shortId = id; | ||
var longId; | ||
var fullPath; | ||
var local; | ||
Object.keys(config.alias).some(function (name) { | ||
var alias = config.alias[name]; | ||
// juicer -> juicer | ||
// juicer/index.js -> juicer | ||
if (id === name) { | ||
longId = alias; | ||
} else if (id.indexOf(name) === 0) { | ||
longId = id.replace(name, alias +'/'); | ||
} | ||
if (longId) { | ||
return true; | ||
} | ||
}); | ||
Object.keys(config.paths).some(function (name) { | ||
var base = config.paths[name]; | ||
if (longId.indexOf(name) === 0) { | ||
fullPath = longId.replace(name, base + '/'); | ||
if (name === config.rename) { | ||
local = longId.replace(name, config.rootdir+'/'); | ||
} | ||
return true; | ||
} | ||
}); | ||
return { | ||
shortId: resolvePath(shortId), | ||
longId: resolvePath(longId), | ||
online: resolvePath(fullPath), | ||
local: resolvePath(local) | ||
if (ignored) { | ||
return cb(null, file); | ||
} | ||
} | ||
var sub2sup = {}; | ||
var sup2sub = {}; | ||
var filesMap = {}; | ||
return es.map(function (file, callback) { | ||
// console.log(config) | ||
// 跳过无需压缩的文件 | ||
if (util.ignore(String(file.relative), config.ignore, { | ||
base: config.rootdir | ||
})) { | ||
return callback(null, file); | ||
} | ||
var code = String(file.contents); | ||
var filePath = String(file.path); | ||
var supMod = realPath2Id(filePath); | ||
var _files = filesMap[supMod.online] = filesMap[supMod.online] || supMod; | ||
var deps = util.getRequires(code).map(function (name) { | ||
var subMod; | ||
// relative path | ||
if (name[0] === '.') { | ||
subMod = realPath2Id(path.join(path.dirname(filePath), name)); | ||
} else { | ||
subMod = id2RealPath(name); | ||
var id = prefix + `/${file.relative}`; | ||
var cnt = file.contents.toString(); | ||
var deps = getDeps(file.contents.toString()).map(function (subid) { | ||
if (config.alias[subid]) { | ||
return subid; | ||
} | ||
sub2sup[subMod.online] = sub2sup[subMod.online] || {}; | ||
sub2sup[subMod.online][supMod.online] = 1; | ||
sup2sub[supMod.online] = sup2sub[supMod.online] || {}; | ||
sup2sub[supMod.online][subMod.online] = 1; | ||
(_files.deps = _files.deps || {})[subMod.online] = subMod; | ||
var relativePath = path.relative(path.dirname(supMod.longId), subMod.longId); | ||
if (relativePath[0] !== '.') { | ||
relativePath = './' + relativePath; | ||
if (subid[0] === '.') { | ||
return path.join(path.dirname(id), subid); | ||
} | ||
return [name, relativePath, subMod.shortId || subMod.longId].sort(function (a, b) { | ||
return a.length > b.length; | ||
})[0]; | ||
}); | ||
util.circleCheck(filesMap); | ||
file.contents = util.fillWrap(code, supMod.shortId || supMod.longId, deps, config.anonymous); | ||
callback(null, file); | ||
config.mapfile && util.mapfile(config.mapfile, { | ||
alias: config.alias, | ||
paths: config.paths, | ||
charset: config.charset, | ||
combo: filesMap, | ||
base: config.base | ||
}); | ||
id = id.replace(/\.js$/,''); | ||
config.deps[id] = deps; | ||
file.contents = helper.fillWrap(cnt, id, deps); | ||
cb(null, file); | ||
exports._t && clearTimeout(exports._t); | ||
exports._t = setTimeout(function () { | ||
var info = { | ||
base: config.base.replace(/^https:\/\//i,'//'), | ||
vars: config.vars, | ||
paths: config.paths, | ||
alias: config.alias, | ||
deps: config.deps | ||
}; | ||
var code = "seajs.config(" + JSON.stringify(info) + ")"; | ||
require('fs').writeFileSync(path.join(config.src, config.mapfile), code); | ||
require('fs').writeFileSync(path.join(config.dest, config.mapfile), code); | ||
}, 500); | ||
debug.log('module %s depends %s ',id, deps); | ||
}); | ||
} | ||
} |
{ | ||
"name": "gulp-seajs-trs", | ||
"version": "0.2.1", | ||
"version": "1.0.1", | ||
"description": "An seajs transport plugin ", | ||
@@ -29,8 +29,8 @@ "main": "index.js", | ||
"dependencies": { | ||
"node-lancer": "*", | ||
"event-stream": "^3.1.7", | ||
"gulp-util": "^3.0.1", | ||
"js-beautify": "^1.5.4", | ||
"minimatch": "^2.0.1", | ||
"uglify-js": "^2.4.16" | ||
"node-lancer": "^1.0.2" | ||
} | ||
} |
@@ -5,32 +5,28 @@ # 使用说明 | ||
```json | ||
```js | ||
{ | ||
// 别名的文件或者文件夹,文件夹以 /结尾 以文件夹名称开始 | ||
// 例如: common/widgets/slider/ | ||
alias: {}, | ||
// 路径别名,用以控制线上文件路径 如未设置当前模块,则按照 | ||
// `{base}/{name}/{version}/` 格式进行拼接 | ||
// 拼接最终配置无`http(s):` | ||
paths: {}, | ||
// 依赖关系拓扑,用于动态combo | ||
combo: {}, | ||
// 基础路径地址。 | ||
base: 'https://g.alicdn.com/ju/', | ||
// 是否生成map.js 如果不需要,可配置false | ||
mapfile: 'map.js', | ||
// 根目录,绝对路径 | ||
rootdir: rootdir+'/src/', | ||
// 当前包名 | ||
// 用于网络请求 | ||
name: '', | ||
// 用于定义包 | ||
rename: '', | ||
// 版本设置 | ||
version: '0.0.0', | ||
// 编码设置 | ||
charset: 'utf-8', | ||
// 忽略部分文件,防止二次编译等问题 | ||
// 根目录文件 用于存储 map.js (debug 期用 src) | ||
src: '', | ||
// 输出根目录 用于存储 输出后的 map.js | ||
dest: "", | ||
// base | ||
base: 'https://g.alicdn.com/', | ||
// 当前包的 var name | ||
varName: "", | ||
// 多个包的 var names | ||
vars: {}, | ||
// 约定的一些路径 | ||
paths: { | ||
}, | ||
// 映射的一些公共库 | ||
alias: { | ||
}, | ||
// 依赖关系 | ||
deps: {}, | ||
// 忽略的文件 | ||
ignore: [], | ||
// 是否匿名包,默认是false | ||
anonymous: false | ||
// 输出依赖配置表的文件名 | ||
mapfile: 'map.js' | ||
} | ||
@@ -37,0 +33,0 @@ ``` |
@@ -116,3 +116,3 @@ var REQUIRE_RE = /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g; | ||
return pattern.some(function (pattern) { | ||
// | ||
// | ||
return exports.ignore(relativePath, pattern, opts); | ||
@@ -172,2 +172,2 @@ }); | ||
require('fs').writeFileSync(file, code); | ||
}; | ||
}; |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
19064
4
8
640
2
36
3
1
+ Addednode-lancer@^1.0.2
+ Addedcolors@1.4.0(transitive)
+ Addednode-lancer@1.1.0(transitive)
- Removedgulp-util@^3.0.1
- Removeduglify-js@^2.4.16
- Removedalign-text@0.1.4(transitive)
- Removedansi-gray@0.1.1(transitive)
- Removedansi-regex@2.1.1(transitive)
- Removedansi-styles@2.2.1(transitive)
- Removedansi-wrap@0.1.0(transitive)
- Removedarray-differ@1.0.0(transitive)
- Removedarray-uniq@1.0.3(transitive)
- Removedbeeper@1.1.1(transitive)
- Removedcamelcase@1.2.1(transitive)
- Removedcenter-align@0.1.3(transitive)
- Removedchalk@1.1.3(transitive)
- Removedcliui@2.1.0(transitive)
- Removedclone@1.0.4(transitive)
- Removedclone-stats@0.0.1(transitive)
- Removedcolor-support@1.1.3(transitive)
- Removedcore-util-is@1.0.3(transitive)
- Removeddateformat@2.2.0(transitive)
- Removeddecamelize@1.2.0(transitive)
- Removedduplexer2@0.0.2(transitive)
- Removedescape-string-regexp@1.0.5(transitive)
- Removedfancy-log@1.3.3(transitive)
- Removedglogg@1.0.2(transitive)
- Removedgulp-util@3.0.8(transitive)
- Removedgulplog@1.0.0(transitive)
- Removedhas-ansi@2.0.0(transitive)
- Removedhas-gulplog@0.1.0(transitive)
- Removedinherits@2.0.4(transitive)
- Removedis-buffer@1.1.6(transitive)
- Removedisarray@0.0.11.0.0(transitive)
- Removedkind-of@3.2.2(transitive)
- Removedlazy-cache@1.0.4(transitive)
- Removedlodash._basecopy@3.0.1(transitive)
- Removedlodash._basetostring@3.0.1(transitive)
- Removedlodash._basevalues@3.0.0(transitive)
- Removedlodash._getnative@3.9.1(transitive)
- Removedlodash._isiterateecall@3.0.9(transitive)
- Removedlodash._reescape@3.0.0(transitive)
- Removedlodash._reevaluate@3.0.0(transitive)
- Removedlodash._reinterpolate@3.0.0(transitive)
- Removedlodash._root@3.0.1(transitive)
- Removedlodash.escape@3.2.0(transitive)
- Removedlodash.isarguments@3.1.0(transitive)
- Removedlodash.isarray@3.0.4(transitive)
- Removedlodash.keys@3.1.2(transitive)
- Removedlodash.restparam@3.6.1(transitive)
- Removedlodash.template@3.6.2(transitive)
- Removedlodash.templatesettings@3.1.1(transitive)
- Removedlongest@1.0.1(transitive)
- Removedminimist@1.2.8(transitive)
- Removedmultipipe@0.1.2(transitive)
- Removedobject-assign@3.0.0(transitive)
- Removedparse-node-version@1.0.1(transitive)
- Removedprocess-nextick-args@2.0.1(transitive)
- Removedreadable-stream@1.1.142.3.8(transitive)
- Removedrepeat-string@1.6.1(transitive)
- Removedreplace-ext@0.0.1(transitive)
- Removedright-align@0.1.3(transitive)
- Removedsafe-buffer@5.1.2(transitive)
- Removedsource-map@0.5.7(transitive)
- Removedsparkles@1.0.1(transitive)
- Removedstring_decoder@0.10.311.1.1(transitive)
- Removedstrip-ansi@3.0.1(transitive)
- Removedsupports-color@2.0.0(transitive)
- Removedthrough2@2.0.5(transitive)
- Removedtime-stamp@1.1.0(transitive)
- Removeduglify-js@2.8.29(transitive)
- Removeduglify-to-browserify@1.0.2(transitive)
- Removedutil-deprecate@1.0.2(transitive)
- Removedvinyl@0.5.3(transitive)
- Removedwindow-size@0.1.0(transitive)
- Removedwordwrap@0.0.2(transitive)
- Removedxtend@4.0.2(transitive)
- Removedyargs@3.10.0(transitive)