重写js文件

'use strict';
/**
 * 动态设置环境host.js的地址
 * hostUrl => host.js路径
 * process.env.npm_config_argv => 返回 {"remain":[],"cooked":["run","dev"],"original":["run","dev"]} | {"remain":[],"cooked":["run","build"],"original":["run","build"]}
 * runType => 执行哪个环境
 */
const fs = require('fs');
const path = require('path');
let hostUrl = path.resolve(__dirname, './../request/host.js');
let configArgv = process.env.npm_config_argv;
let runType = JSON.parse(configArgv).cooked[1];

!(function() {
	let obj = {};
	console.log('runType执行');
	if (runType === 'dev') {
		console.log('执行线上环境');
		obj = {
			ex: 'http://xxx.xx.148.81',
			hd: 'http://xxx.xx.148.81',
		};
	}
	if (runType === 'build') {
		console.log('执行开发环境');
		obj = {
			ex: 'https://xxx.io',
			hd: 'https://xxx.io',
		};
	}
	let routerContent = `export default ${JSON.stringify(obj)}`;
	fs.writeFile(hostUrl, routerContent, (err, data) => {
		console.log('setHost设置成功');
	});
})();

  

二. 在指定位置插入数据

// 将读取的文件分隔成数据
	const data = fs.readFileSync(pathName, 'utf8').split('\n');
	// 创建新的数组来保存格式后, 清除空白的数据, 用于后面查找在哪个位置插入数据
	let newData = [];
	let deletePos = -1;
	data.forEach((item, index) => {
		// 如果已经赋值过, 则记录下标index, 后面删除
		let idx = item.indexOf('siteType');
		if (idx > -1) {
			deletePos = index;
		} else {
			newData[index] = item.replace(/\s*/g, '');
		}
	});
	// 找到指定的位置
	let pos = newData.indexOf('</head>');
	// 删除<script>var siteType = ['ex'];</script>, 同时下标减一
	if (deletePos > -1) {
		data.splice(deletePos, 1);
		pos = pos - 1;
	}
	// 追加数据
	data.splice(pos, 0, `\t\t<script>var siteType = ${JSON.stringify(siteType)};</script>`);
	// 重新写入数据
	fs.writeFileSync(pathName, data.join('\n'), 'utf8');

  

posted @ 2020-05-23 16:19  AlanTao  阅读(347)  评论(0编辑  收藏  举报