对遗留代码同时使用Imports-Loader和Exports-Loader

时间:2017-09-12 14:40:54

标签: webpack-2 imports-loader exports-loader

我有2个遗留的JS文件,我不想改变它们。出于这个原因,我想使用exports-loader和imports-loader

文件B-legacy需要文件A-legacy

中的全局var GLOB

我的webpack.config.js导致

rules: [
        { test: /\.ts$/, use: 'ts-loader' },     // Typescript file loader;              
        {
            test: path.resolve(__dirname, '../Scripts/legacy/A-legacy'),        
            use: 'exports-loader?GLOB'
        },
        {
            test: path.resolve(__dirname, '../Scripts/legacy/B-legacy'),
            use: 'imports-loader?GLOB'
        } 
    ],

我的理解应该有用。我在A-legacy中导出GLOB var并希望将其导入B-legacy。

但是构建它会产生以下错误:

   ./Scripts/legacy/B-legacy.js中的错误   找不到模块:错误:无法解决' GLOB' in' C:\ anypath \ Scripts \ legacy'    @ ./Scripts/legacy/A-legacy.js 2:11-26

我已经尝试添加强制执行:" pre"到exports-loader规则。但这并没有改变任何事情

1 个答案:

答案 0 :(得分:0)

尽管我使用的是内联导入,但是在安装过程中发生了完全相同的错误。我解决问题的方法是删除imports-loader文件中的B-legacy

示例设置是我遇到Module not found错误:

import formValidation from 'exports-loader?FormValidation!./src/form-validation';
import script from '!!imports-loader?$=jquery,FormValidation!./src/script';

固定设置:

import formValidation from 'exports-loader?FormValidation!./src/form-validation';
import script from '!!imports-loader?$=jquery!./src/script'; // removed FormValidation

最重要的是,我不得不公开FormValidation,使其在浏览器中仍然可用,并使用imports-loaderthis定义为window

import formValidation from 'expose-loader?FormValidation!imports-loader?this=>window!exports-loader?FormValidation!./src/form-validation';

请注意,装载机的顺序很重要。