将我的库分离到Libs,Core和Addons
我在这个世界很新,所以忍受着我。
我有我的大图书馆,我试图将其转换为es6模块, babel
& webpack
将其捆绑到几个文件。
我的库文件夹看起来像这样
--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筑”