javascript - 创建纯 css javascript 库/包的最佳实践是什么

标签 javascript css webpack ecmascript-6 babeljs

我想创建一个可以是 npm installed 的库进入十几个 javascript 元素之一(有些是 ES6 元素,但许多是更老的 ES5 元素)。库元素还有一些非常常用的 javascript 方法/类/组件/等。

(顺便说一句,该库元素包括一些用 ES6 编写的常用方法和实用程序,但使用 webpack+babel 进行了转译,也可以在 ES5 和 ES6 元素中使用。意思是:我在 webpack.config 中的输入文件是 module.exports 的文件;我的输出是单个构建文件。)

主要问题:

在 ES6 上的实现,例如一个 React 元素,我不确定如何 import 'nodeModuleName/someSimpleCssFile'这将允许 webpack/babel(在实现方面)做这件事。特别是在一个元素中,唯一从该元素导入的是一个全局样式表。

在旧元素的实现中,开发人员需要能够使用 <link />标记以拉入一个样式表。

我知道我可以简单地将所有 css 文件放在 main 中指定的文件夹中package.json 的属性,但这是最好的方法吗?看起来,如果造型师添加了 background: url('some/path/to/image.png');,向前看使用 babel 转译器会将所有这些东西拉到单个构建文件中。

这种情况下的问题是,我如何 import只有一个 css 文件被转换成一个构建文件?或者,更确切地说,我什至如何在我的主 module.exports 中包含单个 css 文件?导出以便我可以以某种方式仅将该 css 文件导入 ES6/ES2015 元素?

最佳答案

实现此目的的一种方法可能是将 CSS 样式信息存储在库中的对象中,并动态创建和填充 <style>页面加载时标记。

/* example */
var someStyles = {
    body: {
        color: '#fff',
        'background-color': '#000',
        'font-family': 'sans-serif',
        margin: '33px'
    },
    'h1, h2, h3, h4': {
        'font-weight': 'normal'
    },
    ID_box: {
        width: '100%',
        height: 'auto',
        color: '#000',
        'background-color': '#fff'
    },
    CLASS_cell: {
        border: '1px solid #999',
        padding: '5px 10px'
    }
};

var sTag = document.createElement('style');
var css = '';

sTag.type = 'text/css';
sTag.scoped = 'true';

Object.keys(someStyles).forEach(function(s) {
    var rules = someStyles[s];

    css += s.replace(/ID_/g, '#').replace(/CLASS_/g, '.') + ' {\n';

    Object.keys(rules).forEach(function(r) {
        css += '  '+ r + ': ' + rules[r] + ';\n';
    });

    css += '}\n';
});


sTag.textContent = css;

document.body.insertBefore(sTag, document.body.firstChild);

只是一个想法:)

关于javascript - 创建纯 css javascript 库/包的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44810991/

相关文章:

javascript - 如何使用游标映射来自 Twitch API 的所有结果 - React

webpack - 为开发/登台/生产设置不同的 <base> 的正确方法是什么

javascript - JavaScript AES 256 解密 C 加密数据的问题

javascript - 创建自定义联系我们 map 的最佳方式

css - Internet Explorer CSS 属性 "filter"忽略溢出 :visible

javascript - 推送菜单在默认的 Android 浏览器上无法正常工作

webpack - VS2019中的ASP CORE和webpack : how to configure IIS Express to proxy js/css requests to webpack devserver?

javascript - 如何停止获取 __webpack_hmr

javascript - 切换 ng-bind-html

html - 如何在圆形 div 中垂直居中对齐 Font Awesome 图标?