UNPKG

builder-isv

Version:

ISV 模块本地预览与云构建器

66 lines (55 loc) 2.33 kB
/** * @author 龙喜<xiaolong.lxl@alibaba-inc.com> * @description 安装依赖插件 */ 'use strict'; const path = require('path'); const Base = require('../models/base'); const utils = require('../lib/utils'); function InstallDepsPlugin(options) { this.options = options; } InstallDepsPlugin.prototype.apply = function(compiler) { // 预览模式 if (this.options.invokeType === Base.INVOKE_TYPE_PREVIEW) { // watch 模式下每次重新构建前都会触发此事件 compiler.plugin('watch-run', (compilation, callback) => { // 前置 hook,用于清空「依赖安装错误」标记 this.options.onBeforeInstall && this.options.onBeforeInstall(); let prevPackageInfo = utils.JSONStore.create(path.join(this.options.outputDir, 'package.json'), true); let packageInfo = utils.JSONStore.create(path.join(this.options.cwd, 'package.json')); //console.log(path.join(this.options.outputDir, 'package.json'), path.join(this.options.cwd, 'package.json')); //console.log(JSON.stringify(prevPackageInfo.dependencies), JSON.stringify(packageInfo.dependencies)); // 对比 dependencies if (JSON.stringify(prevPackageInfo.dependencies) !== JSON.stringify(packageInfo.dependencies)) { prevPackageInfo.dependencies = packageInfo.dependencies; prevPackageInfo.changed = true; prevPackageInfo.__save(); utils.log.info('模块依赖发生了变更,重新安装依赖(修改依赖后,需编辑 JS 以触发重新编译)'); // 执行 tnpm 安装依赖 utils.tnpmInstall(this.options.cwd).then(() => { callback(); }, (error) => { // 传递 error 将导致 watch 停止,所以使构建正常进行,通过 onError 回调通知 renderer 透出错误即可 this.options.onError && this.options.onError(error); callback(); }); } else { prevPackageInfo.changed = false; prevPackageInfo.__save(); callback(); } }); } else { // 云构建模式 compiler.plugin('run', (compilation, callback) => { // 执行 tnpm 安装依赖 utils.tnpmInstall(this.options.cwd).then(() => { callback(); }, (error) => { callback(error); }); }); } }; module.exports = InstallDepsPlugin;