7 Star 22 Fork 9

Nick Zhang / webpack-vue-i18n-loader

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
index.js 1.99 KB
一键复制 编辑 原始数据 按行查看 历史
Nick Zhang 提交于 2019-10-21 16:11 . 更新逻辑
const loaderUtils = require('loader-utils');
const path = require('path');
const fs = require('fs');
const FileProcess = require('./lib/fileProcess');
let messages = null;
const replaceTemplateContent = (content) => {
return FileProcess.generateTemplate(messages, content, true);
};
const replaceScriptContent = (content) => {
return FileProcess.generateScript(messages, content, true);
};
const initMessages = ({localeFile}) => {
//如果资源数据不存在,但资源文件存在,则将资源文件载入到资源数据中
if (!messages && fs.existsSync(localeFile)) {
messages = require(localeFile);
//文件变化监听
fs.watchFile(localeFile, {
interval: 1000
}, _ => {
//删除require缓存并置空,等待下一次的载入
delete require.cache[require.resolve(localeFile)];
messages = null;
});
}
};
module.exports = function (source) {
let options = loaderUtils.getOptions(this);
options = Object.assign({
localeFile: path.join(process.cwd(), 'src/locale/zh_cn.js')
}, options);
initMessages(options);
if (!messages) return source;
let result = '';
if (path.extname(this.resourcePath) === '.js' && this.resourcePath.indexOf(path.parse(options.localeFile).dir) < 0) {
//处理js文件
result = replaceScriptContent(source);
} else if (path.extname(this.resourcePath) === '.vue') {
//处理vue文件
let query = loaderUtils.parseQuery(this.resourceQuery || '?');
if (query.type === 'script' && query.lang === 'js') {
result = replaceScriptContent(source);
} else {
result = source.replace(/(<template[^>]*>)((.|\n)*)(<\/template>)/gim, (_, preTag, content, $3, afterTag) => {
return `${preTag}${replaceTemplateContent(content)}${afterTag}`;
});
result = result.replace(/(<script[^>]*>)((.|\n)*)(<\/script>)/gim, (_, preTag, content, $3, afterTag) => {
return `${preTag}${replaceScriptContent(content)}${afterTag}`;
});
}
} else {
result = source;
}
return result;
};
NodeJS
1
https://gitee.com/thesadboy/webpack-vue-i18n-loader.git
git@gitee.com:thesadboy/webpack-vue-i18n-loader.git
thesadboy
webpack-vue-i18n-loader
webpack-vue-i18n-loader
master

搜索帮助