[英]webpack create and export a global object which contains global variables to be accessed by other files
我已经慢慢地将我的网站从使用初始化的 js object 迁移到尝试集成导入和导出方法。 多年来我一直在使用 webpack,不久前升级到 v4。
我有一个全局 object ,我想立即对其进行初始化,以便我的其他组件可以访问这些全局变量。
我原来的全局文件是这样的:
const sw = {};
sw.globalVars = () => {
sw.path = document.location.pathname;
sw.href = document.location.href;
sw.dom = $('html');
sw.body = $('body');
...
};
sw.globalVars();
module.exports = sw;
我可以像这样导入sw object
const sw = require('./sw');
// then I can access sw.dom as a global variale.
我现在想将其迁移到全局 window object。
我的新全局文件如下所示:
sw = {};
sw.globalVars = () => {
sw.path = document.location.pathname;
sw.href = document.location.href;
sw.dom = $('html');
sw.body = $('body');
...
};
sw = window.sw;
window.sw.globalVars(); // initialise the object
// export default sw; // I am assuming I don't need this export function anymore.
我不是 100% 确定我现在如何导入全局,是使用const sw require('./sw')
还是import sw from './sw';
sw object 现在在 Chrome 中未定义,尽管我可以通过控制台中的sw
和window.sw
访问它。 如何初始化 object 并将其分配给 window 而无需更新我所有其他部分文件中的引用。
如果您需要更多信息或需要我发布 app.js,请告诉我(我也尝试了几种方法)
更新
我现在尝试更改我的 webpack 文件以使用以下内容构建全局 js 文件:
entry: {
app: rootFolder + srcFolder + 'app.js',
'app.min': rootFolder + srcFolder + 'app.js',
sw: rootFolder + srcFolder + 'js/sw.js' // this is my global object
},
在我的插件中:
new webpack.ProvidePlugin({
identifier: path.resolve(path.join(__dirname, rootFolder + srcFolder + 'js/sw'))
})
这已将sw.js
文件导出到我的 output 文件夹,但是我仍然不能 100% 确定这个全局 object 是如何导出和导入的。 我可以在我的索引文件中链接到 sw.js,但我希望 webpack 和我的部分仍然能够在需要时导入这个文件和 object。
好吧,我已经解决了这个问题,尽管对结果不是特别满意。
一旦我尝试了上面的第二种方法(为独立的 js 文件创建一个新入口点),导出器就可以工作,但 webpack 包含其他文件的缩小设置,所以我的 js 文件被包装在 webpack ZC1C425268E68384D1ABZA 中,例如 47774F1450,
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
所以我只是将sw.js
文件复制到我的 output 文件夹并在我的模板中链接到它。
<script type="text/javascript" src="/app/js/sw.js"></script>
<script type="text/javascript" src="/app/js/app.js"></script>
它已从 webpack 工作流程中删除,即使内容相同,我也希望将源文件和 output 文件分开。 如果有人可以改进这个答案,我想听听。
2020 年 7 月 27 日更新
所以我更新了我的webpack.config
(在阅读了各种复制和移动文件 npm 模块之后)。
我将此添加到配置的顶部
const fs = require('fs');
const oldPath = rootFolder + srcFolder + 'js/sw.js';
const newPath = rootFolder + outputFolder + 'js/sw.js';
fs.copyFile(oldPath, newPath, (err) => {
if (err) {
throw err;
}
console.log(`source ${oldPath} was copied to ${newPath}`);
});
它工作了,所以现在我的流程好多了(不必再担心手动复制文件了)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.