将我的库分离到Libs,Core和Addons

我在这个世界很新,所以忍受着我。

我有我的大图书馆,我试图将其转换为es6模块, babelwebpack将其捆绑到几个文件。

我的库文件夹看起来像这样

 --src -- core -- folder1 -- folder2 -- addons -- addon 1 -- addon 1 files and folders -- addon 2 -- addon 2 files and folders -- libs -- internal -- internal lib1 -- internal lib2 -- external -- external lib1 -- external lib2 

我的库代码是分开的2 – 核心代码和插件,我正在使用一些库( libs文件夹)

我的愿望是:

  • 所有的内部库将被捆绑成一个库文件
  • 包中排除了外部库
  • 所有的核心文件将被捆绑成一个核心文件
  • 我所有的插件将被捆绑到每个插件文件中
  • 注意:插件正在使用核心文件,而不是捆绑在其中

最终结果:libs.js core.js addon1.js addon2.js

我的客户将不得不使用前2个js文件。 和Addon将被包括在他们的意愿。

到目前为止,我设法使用CommonsChunkPlugin分开我的内部库

 new webpack.optimize.CommonsChunkPlugin({ name: "libs", minChunks: function(module){ return module.context && module.context.indexOf("\\libs\\internal\\") !== -1; }, }); 

外部库被使用null-loader忽略

 { test: /libs\\external/, loader: 'null-loader' }, 

我的入口点js看起来像这样

导入一个

 "./core/a"; import b from "./core/b"; import addon1C from "./addons/addon1/c"; const myLib = { core: {a,b}, addons: {addon1C} } export {myLib} 

现在这个问题从核心和插件开始。

如果我跳过插件部分,在我的客户端包括2个脚本(库,核心)

只是myLib.core.a正在工作。

这个问题是否阻止了插件中的核心代码的捆绑。

我试图用另一个块插件做,但它会导致模块中的一些错误,因为插件是使用核心代码和入口点是使用插件导出它,所以它不会find该模块。

尝试了2个入口点,所以我将有没有插件的第一个入口点,并分别导出插件,但现在的核心代码是捆绑在其中。

那么,我该怎么做? 或者,如果有更好的方法去做我迄今为止所做的任何事情。 我很高兴学习。

为了实现这一点,我认为你必须采用不同的方法。 我也有类似的情况,其他一些团队需要扩展应用程序的核心function。

为了做到这一点,我必须确保核心附加程序不直接相互沟通。 相反,你的核心代码应该提供一些你的插件所使用的API。

另一方面,当你的加载项将尝试导入内核时,你将不得不提供一个shim文件,而不是内核本身。

我将尝试在这里写下几个例子:

 // core export default const Core = {} const addons = [] Core.addPlugin = function(addOn) { addons.push(addOn) // or doing something else } // shim-core.js export default typeof window.Core !== undefined ? window.Core : Core // add-on import Core from 'shim-core' const addOn = function() { // something funky return {} } Core.addPlugin(addOn) 

我希望它能帮助你理解“build筑”