有没有一种方法可以将一个文件多次作为不同的模块

姆希洛夫

我需要在.js和.less文件之间共享一个常量。我对此的解决方案包括两个步骤:

  1. 创建一个扩展名为.const的单独文件,其中包含所有共享const。它具有javascript模块语法,将照常执行。
  2. 创建一个加载程序,该加载程序将根据需要此源文件的文件扩展名来更改源代码。因此,例如,如果需要.less文件,那么代码将转换为更少的表达式

但是我找不到根据所需模块从一个源文件创建两个模块的方法。

我的条件加载程序源代码可以完成以下任务:

module.exports = function(content, sourceMap) {
    var _ = require('lodash');
    var loaderUtils = require('loader-utils');
    var reasonResource = this._module.reasons[0].module.resource;
    var reasonResourceExtension = _.last(reasonResource.split('.'));

    switch (reasonResourceExtension)
    {
        case 'js':
        case 'const':
            var query = loaderUtils.parseQuery(this.query);
            if(query.cacheable && this.cacheable)
                this.cacheable();

            return content;
            break;
        case 'less':
            var consts = this.exec(content, this.resource);

            return JSON.stringify(consts);
            break;
        default:
            throw new Error('Not supported import .const modules from ' + reasonResourceExtension.green);
    }
};
姆希洛夫

问题出在less-loader它未应用在中配置的装载程序webpack.config.js因此解决方案是增加对less-loader加载程序列表进行参数设置的功能

拉取要求


然后就可以开始写Constants.const内容了

export.modules = { debug: true }

然后要求 Utilities.less

@import (reference) 'Const.const';

应用此装载机

module.exports = function(content, sourceMap) {
    var _ = require('lodash');
    var loaderUtils = require('loader-utils');
    var reasonResource = this._module.reasons[0].module.resource;
    var reasonResourceExtension = _.last(reasonResource.split('.'));
    var query = loaderUtils.parseQuery(this.query);

    switch (reasonResourceExtension)
    {
        case 'js':
        case 'const':
            if(query.cacheable && this.cacheable)
                this.cacheable();

            return content;
            break;
        case 'less':
            if(query.cacheable && this.cacheable)
                this.cacheable();

            var consts = this.exec(content, this.resource);
            var str = '';
            (function append(consts, prefix = '')
            {
                for (var key in consts)
                {
                    let value = consts[key];
                    if (value.constructor != Object) {
                        str += '@' + prefix + key + ': ' + toLessCssValue(consts[key]) + ';';
                    } else {
                        throw new Error('Nested objects not supported in .const files');
                    }
                }
            }(consts));

            return str;
            break;
        default:
            throw new Error('Not supported import .const modules from ' + reasonResourceExtension.green);
    }

    function toLessCssValue(value) {
        if (isNaN(value)) {
            return value;
        } else {
            return 'unit(' + value + ', px)';
        }
    }
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有一种方法可以使可执行文件运行一个运行了不同python文件的python文件?

有没有一种方法可以将元组转换为具有不同项目类型的另一个元组?

有没有一种方法可以将屏幕上的按钮作为目标?

有没有一种方法可以只对一个文件运行go测试?

有没有一种方法可以创建一个包含Kubernetes Pod的多个文件的configMap?

有没有一种方法可以只为菜单编辑一个文件?

有没有一种方法可以将Docker映像合并到一个容器中?

有没有一种方法可以将数组对象添加到一个类?

有没有一种方法可以将漫游器绑定到一个特定的频道?

有没有一种方法可以将TCP数据包作为另一个应用程序发送?

有没有一种方法可以将wpf窗口作为另一个窗口的子窗口插入

在Windows上,有没有一种方法可以将选定的文本作为文件夹打开?

有没有一种方法可以将多个数据框导出到一个excel文件中?

有没有一种方法可以将指定的表快速提取到另一个HDF5文件中?

有没有一种方法可以将变量从另一个文件循环到我的bash脚本中?

有没有一种方法可以将React事件移动到另一个文件然后导入它?

有没有一种方法可以在Python中多次格式化一个字符串?

有没有一种方法可以将这两种VB.Net扩展方法组合为一个方法?

有没有一种方法可以将Java中的一个类“别名”为另一个类?

MySQL:有没有一种方法可以将值从一个表插入到另一个表?

有没有一种方法可以将元素从一个网格移动到另一个网格

有没有一种方法可以将最后一个div放置在第一个div的顶部,而不会使div重叠

有没有一种方法可以执行VLookup或类似的函数,该函数将返回最后一个但一个值?

有没有一种方法可以在bash中多次播放CD?

有没有一种方法可以多次遍历HttpServletRequest.getAttributeNames()?

有没有一种方法可以将列表作为argparse中的参数之一传递

有没有一种方法可以在一个视图中显示所有Sylius产品?

有没有一种方法可以绘制2个y值和一个x

有没有一种方法可以使用gnuplot在一个图形上使用3个不同的Y轴?