gulp-amd-wrap是一个分析amd模块,并进行预编译处理的的gulp插件,主要完成根据依赖分析及项目路径生成模块声明及引用的moduleID,并封装成amd规范的模块。
npm i gulp-amd-wrap --save-dev
import { amdWrap } from 'gulp-amd-wrap';
gulp.src(
// 资源
`${__dirname}\/assert/*.js`, {
// 工程baseUrl
base: __dirname,
},
).pipe(amdWrap({
baseUrl: '/assert/',
prefix: 'wiseindex/',
// 不参与amd-hook分析的文件
exelude: ['/exclude-**.js', '/dist/**'],
moduleID: {
'moduleID': 'filepath'
}
})).pipe(
gulp.dest(`${__dirname}\/dist\/`),
);
// Before
define(function() {
'use strict';
var fishObj = {
name: 'nimo'
};
var moduleA = require('@scope/moduleA');
var moduleB = require('./moduleB');
require(['A', './B', '/C', '@D/E'], function(a, b, c, d){
console.log(a, b, c, d);
});
return fishObj;
});
// After
define('assert/minify-define', [
'require',
'@scope/moduleA',
'assert/moduleB'
], function (require, moduleA, moduleB) {
'use strict';
var fishObj = { name: 'nimo' };
require([
'A',
'assert/B',
'/C',
'@D/E'
], function (a, b, c, d) {
console.log(a, b, c, d);
});
return fishObj;
});
判断当前node节点是否包含require VariableDeclarator 返回去除后正常的declarations
判断文件filePath是否在规则覆盖范围内
判断当前node节点为require VariableDeclarator
判断当前node节点为require VariableDeclarator
将相对路径转化为绝对路径 ./A ../
将绝对路径转化为基于BaseURL的 ModuleId
从 require VariableDeclarator 节点获取依赖信息