build-plugin-moment-locales
Version:
build-scripts plugins for moment locale
46 lines • 2.01 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var magic_string_1 = require("magic-string");
var pluginutils_1 = require("@rollup/pluginutils");
// moment.js 中存在 require('./locale/' + name),在 webpack 模式下会全量打包
// vite 模式自动注入 `import 'moment/dist/locale/zh-cn'` 语言包
exports.default = (function (locales) {
var entryJs = '';
var include = ['**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx'];
var exclude = 'node_modules/**';
var momentRegex = /moment[/\\]locale[/\\]/;
var filter = (0, pluginutils_1.createFilter)(include, exclude);
var momentLocales = typeof locales === 'string' ? [locales] : locales;
var needSourcemap = false;
return {
name: 'vite-plugin-moment',
enforce: 'pre',
configResolved: function (resolvedConfig) {
needSourcemap = !!resolvedConfig.build.sourcemap;
},
resolveId: function (id) {
// use esm
if (id.match(momentRegex)) {
// moment/dist/locale/ 目录下为 esm 产物
return id.replace(momentRegex, 'moment/dist/locale/');
}
},
transform: function (code, id) {
if (!entryJs && filter(id)) {
entryJs = id;
}
if (entryJs === id && momentLocales) {
// 自动注入 locale,如果源码中已依赖,构建打包后会被去重
var s_1;
var str = function () { return s_1 || (s_1 = new magic_string_1.default(code)); };
str().prependLeft(0, momentLocales.map(function (locale) { return "import 'moment/dist/locale/" + locale + "';"; }).join('\n') + "\n");
return {
map: needSourcemap ? str().generateMap({ hires: true }) : null,
code: str().toString(),
};
}
return null;
}
};
});
//# sourceMappingURL=vitePluginMoment.js.map
;