2

我有 2 个旧 JS 文件,我不想更改。出于这个原因,我想使用exports-loader和imports-loader

文件 B-legacy 需要来自 File A-legacy的全局变量 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 中的错误模块未找到:错误:无法解析“C:\anypath\Scripts\legacy”中的“GLOB”@ ./Scripts/legacy/A-legacy.js 2 :11-26

我已经尝试将 enforce: "pre" 添加到 exports-loader 规则。但这并没有改变任何东西

4

1 回答 1

1

尽管我使用的是内联导入,但我的设置中有完全相同的错误。我解决问题的方法是删除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-loader定义thiswindow

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

请注意,加载程序的顺序很重要。

于 2019-12-19T11:11:01.193 回答