liriliri / licia

Useful utility collection with zero dependencies
https://licia.liriliri.io
MIT License
2.29k stars 158 forks source link

不知道算不算问题,node全局对象会被打进包里 #18

Closed iocdacc closed 4 years ago

iocdacc commented 4 years ago

虽然可以通过webpack配置忽略掉node全局对象 :smile:

surunzi commented 4 years ago

推荐按文件引入,每个模块相当于小型 npm 包。

iocdacc commented 4 years ago

其实我看了按文件引入 里面也存在这样的代码: crypto = require('crypto');

如果打包的话 webpack一样会polyfill然后放入包内

surunzi commented 4 years ago

按文件引入应该不会,你引了哪个模块?crypto 应该只有少量模块会引入。

surunzi commented 4 years ago

https://github.com/webpack/webpack/issues/8826 看起来类似 eval('require')('foo') 这种方法可以避免 webpack 去打包,我看能不能优化下。

iocdacc commented 4 years ago

webpack 会模拟node的crypto 模拟代码高达几百KB 建议在package.json里配置 "module" 与 "browser" 属性来分别指定入口 然后将各自不存在的全局对象去掉

surunzi commented 4 years ago

@iocdacc browser 属性已经配置了,你在 webpack 中直接引用 licia 就只会包含那些能在浏览器运行的模块。这里的情况跟这个配置无关,无法用这样来解决,详情见我上面引用的 issue,目前看来可以用eval('require')('foo') 暂时解决。

surunzi commented 4 years ago

强行使用 browser 配置就必须将原有的一个代码文件分成两份,同时抽离共用部分,最终变成三份,完全没必要。最好的方法就是 webpack 提供方法就像上边 issue 里想要的,然而目前只能用eval来替代。

iocdacc commented 4 years ago
"main": "./node.js",
"browser": "./browser.js"

其实入口已经有两个了。 只需区分一下代码。不过可能会改比较多 确实eval的方法修改比较少