Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webpack 用于SystemJS样式导入的自定义网页包解析器!带装载机_Webpack_Systemjs_Dependency Resolver - Fatal编程技术网

Webpack 用于SystemJS样式导入的自定义网页包解析器!带装载机

Webpack 用于SystemJS样式导入的自定义网页包解析器!带装载机,webpack,systemjs,dependency-resolver,Webpack,Systemjs,Dependency Resolver,我有一个使用SystemJS的项目-这无法更改。我们也在使用故事书,它使用网页-这也不能改变。到目前为止,这两个人玩得很好。但是,我有一个模块,可以将文件作为纯文本加载并解析: 从“./某些模块导入内容!systemjs插件文本'; (东西),; 如果我的项目使用WebPack,则上面的代码如下所示: 从“原始加载程序”导入内容/某些模块'; (东西),; 因为SystemJS是“主要”模块加载程序,所以我希望所有应用程序代码都以SystemJS为中心。我想为webpack编写一个自定义解析

我有一个使用SystemJS的项目-这无法更改。我们也在使用故事书,它使用网页-这也不能改变。到目前为止,这两个人玩得很好。但是,我有一个模块,可以将文件作为纯文本加载并解析:

从“./某些模块导入内容!systemjs插件文本';
(东西),;
如果我的项目使用WebPack,则上面的代码如下所示:

从“原始加载程序”导入内容/某些模块';
(东西),;
因为SystemJS是“主要”模块加载程序,所以我希望所有应用程序代码都以SystemJS为中心。我想为webpack编写一个自定义解析器,以获取SystemJS风格的导入并“翻转”它们(可以这么说)。代码如下所示:

const moduleMap={
“systemjs插件文本”:“原始加载程序”
};
const formatModuleIdForWebPack(systemjsId){
const webpackId=systemjsId.split(“!”).reverse();
webpackId[0]=模块映射[webpackId[0]]| | webpackId[0];
返回webpackId.join(“!”);
}
formatModuleIdForWebPack('./某些模块!systemjs插件文本');
//->“原始装载机!”/某模块的

我按照几个示例创建了一个自定义解析器(和),但没有一个有效负载包含重建请求对象所需的所有数据。有没有一种方法可以让我在模块解析过程中很早就连接到WebPack以实现我的目标?

我能够使用自定义加载程序来实现我的目标。这并不理想,但解析逻辑相当简单,可以随着时间的推移而变得更强大。使用此策略,我可以将其仅应用于项目文件(任何
节点\u模块中的而不是

{
测试:/\.js$/,,
loader:path.resolve('systemjs-loader.js'),
排除:[
解析('node_modules'))
],
选项:{
装载机映射:{
“systemjs插件文本”:“原始加载程序”
}
}
}
。。。和加载程序代码:

const{getOptions}=require('loader-utils');
const escapeRegexp=require('escape-string-regexp');
/**
*将systemjs样式加载程序语法替换为Web包样式:
* 
*/一些模块!systemjs插件->网页包插件/某模块
*/
module.exports=函数(源){
const options=getOptions(此选项);
const map=options.loaderMap;
如果(!map){
抛出新错误('不提供'loaderMap',不需要使用systemjs加载程序');
}
Object.keys(map.forEach)(加载器=>{
//indexOf应该比regex.test快
if(source.indexOf(loader)!=-1){
const exp=new RegExp(`(['”)([^!]+)!${escapeRegexp(loader)}['']`,'g');
source=source.replace(exp,`1${map[loader]}!$2$1`);
}
});
返回源;
};