gpt4 book ai didi

javascript - webpack 包中的必需模块未定义

转载 作者:行者123 更新时间:2023-11-29 17:58:05 25 4
gpt4 key购买 nike

我正在构建一个 javascript 库并使用 require() 方法将外部模块引入其他模块。我的问题是我需要的模块没有定义。我可以看到所有模块都在 webpack 输出文件中,但在运行时所需的模块返回未定义。

我做了一个实验,将需要的模块移动到输出文件顶部的另一个模块中,这样需要的模块首先由浏览器加载。这解决了问题。

例如:

// main.js
var moduleA = require('./module.a.js');

var main = (function() {
"use strict";


return {
moduleA: moduleA
}
})();

exports.main = main;



// module.a.js
var moduleA = (function() {
"use strict";



return {
myMethod: myMethod
}
})();

exports.moduleA = moduleA;

目前我的webpack.config.js定义入口文件是main.js

    var path = require('path');
var webpack = require('webpack');
var libraryName = "myLib";

module.exports = {
entry: './src/modules/main.js',
output: {
path: __dirname+"/build",
filename: libraryName+'.all.js',
library: libraryName,
libraryTarget: 'umd',
umdNamedDefine: true
},
resolve: {
root: [
path.resolve('./src/')
]
},
module: {
loaders: [
// JS
{
test: /.js/,
loader: "babel-loader",
exclude: /node_modules/,
query: {
presets: ['es2015']
}
},
]
}
};

这导致 main.js 首先加载到输出文件中,如果手动重新排序输出文件中的模块以便在我的主模块之前首先读取 moduleA,我该如何使用 webpack 解决这个问题?我的另一个 webpack 构建在输出文件的顶部有入口文件,但它工作正常。

最佳答案

一旦开始使用 Webpack,您就可以使用大大简化的模块。您不必将东西包装在 IIFE 中。 CommonJS 模块(您在使用 Webpack 时正在构建)会自动干净地完成所有工作,并且永远不会污染全局范围。您只公开您放入 module.exports 中的内容。

尝试以下操作:

// main.js
"use strict";

var moduleA = require('./module.a.js');

// do something with moduleA.myMethod()

module.exports = "Whatever you want to export";

// module.a.js
"use strict";

function myMethod() {
return "something";
}

module.exports = { myMethod: myMethod };

不需要其他任何东西。这将与 Webpack 提供的输出一起工作,您永远不必更改 Webpack 输出中的任何内容。 Webpack 将自动执行 require 以在需要时以正确的顺序为您实例化模块。

关于javascript - webpack 包中的必需模块未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37327683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com