Webpack 将网页包加载程序应用于代码片段
有没有办法让webpack将其加载程序应用于文件的一部分?这里有一个例子来说明我的意思 假设我为Webpack 将网页包加载程序应用于代码片段,webpack,webpack-2,Webpack,Webpack 2,有没有办法让webpack将其加载程序应用于文件的一部分?这里有一个例子来说明我的意思 假设我为.scss文件配置了一组加载程序。如果能够用以下两种方法中的任何一种编写组件以产生相同的输出,那将是一件了不起的事情: 1)标准装载机 component.js import './component.scss'; export class Component { ... my-magic-import ` .component { background: #663399 } `
.scss
文件配置了一组加载程序。如果能够用以下两种方法中的任何一种编写组件以产生相同的输出,那将是一件了不起的事情:
1)标准装载机 component.js
import './component.scss';
export class Component {
...
my-magic-import `
.component {
background: #663399
}
`
export class Component {
...
component.scss
.component {
background: #663399
}
...
2)定制装载机 component.js
import './component.scss';
export class Component {
...
my-magic-import `
.component {
background: #663399
}
`
export class Component {
...
我怎样才能达到类似于第二种情况的效果? 我是否可以修改网页识别
所需
、导入
和文件扩展名的方式,以便它能够理解我的自定义语法?
作为最后的手段,我们可以为js文件编写一个加载程序来完成这项工作吗
谢谢你给我的提示,我应该读些什么来完成这项工作。你可以尝试使用这两个带有webpack的库先转换成cssobj,然后再转换成纯CSS (支持sass/less) 您可以编写一个全局唯一的函数
\uu insertCSS
(在应用程序的index.js中),该函数在head
元素中插入纯CSS字符串
现在,这些库只在节点上运行,所以您还需要一个步骤来让它在浏览器中工作:字符串替换插件
在webpack config中,您应该配置replace插件来搜索类似/\uu insertCSS\(.*?\)/
的模式,获取字符串参数,按照上面所示的方式处理它,并用结果替换它
在您的网页包配置中:
var StringReplacePlugin = require("string-replace-webpack-plugin");
var converter = require('cssobj-converter')
var cssobj = require('cssobj')
function parseSass(str){
var obj = converter(str) //obj is a css object
return cssobj(obj) // the result is a CSS string
}
…在模块中
:
loaders: [
// configure replacements for file patterns
{
test: /\.js(x?)$/,
loader: StringReplacePlugin.replace({
replacements: [
{
pattern: /__insertCSS\(`(.*?)`\)/ig,
replacement: function (match, p1, offset, string) {
//p1 is the string enclosed by backticks
var cssStr = parseSass(p1);
//need to escape quotes with JSON in resulting string
return '__insertCSS("' + JSON.stringify(cssStr) + '")'
}
}
]})
}
]
请注意,我还没有测试过这一点,但乍一看似乎是可行的
这个字符串替换加载程序必须位于babel之前,只需将它放在加载程序数组的第一位
这里的医生:谢谢,今天晚些时候我一定会看一看!你使用stringreplace插件的方式对我理解另一种实现方法至关重要。非常感谢您的洞察力和帮助,非常感谢。