使用前端构建工具打包后端服务,我经历了什么?,之前写过前端,知道npmbuild,所以用javascript写的后端程序应该也是npmbuild。好吧,作为一个gopher,我开始使用javascript的刻板印象。我是个地鼠,但是没有懂前端的老婆,就自己做前端。如有错误,请及时更正项目背景或简单介绍一下项目背景。屏幕前的专业前端同学可以先猜猜会不会行。如果有效,该怎么做。这个程序的node.js端提供了一个简单的http服务。内部逻辑涉及到:toml2jsoncurl-to-gotoml-to-gotoml2xmlxml2jsonjson2toml这些逻辑可以通过内置包解决,有的依赖第三方包,如:json2tomlobject-to-xml中还有一些组件,这没有提交给npm,也没有模块化。需要把代码找出来,单独处理,比如:curl-to-gotoml-to-go等第三方包感觉都是在前端环境运行的,(一开始我只是通过npm拉下来的,不知道能不能跑在node.js上,npm也没有说明前后端这些包的运行时兼容性)现在想用webpack把它的全部打包代码变成一个可以在node.js环境下运行的js文件,好了,问题和背景如上。不要说:node.js打包什么包!我面临以下问题:如何导入前端包,如何导入非模块化包,如何让webpack编译的结果在node.js中运行。.import和requirerequire/exports的区别属于社区自己选出的方案。import/export属于ECMAScript规范。这里我们使用了webpack,所以我们必须使用import/export作为代码导入语法。因此,更改curl-to-go代码并在末尾添加:functioncurlToGo(curl){...}+exportdefaultcurlToGo;这样就解决了各种js文件合并的问题。第二个问题需要明确。node.js包管理机制node.js模块node.js模块管理使用require。由于需要使用node.js启动一个http服务,所以需要使用require语句引入http模块。.但这还没有结束,webpack还不能很好的区分哪些是外部依赖,哪些是内部依赖。所以这里要告诉webpack:module.exports={target:"node",}第三个问题,那就听天由命吧,build完了,试试run吧。最终的webpack配置如下。---a/webpack.config.js+++b/webpack.config.js@@-1,5+1,6@@constpath=require('path');constwebpack=require('webpack');+varfs=require("fs")/**导入ParallelUglifyPlugin插件@@-13,9+14,20@@constPATHS={build:path.join(__dirname,'build'),};+varnodeModules={};+fs.readdirSync('node_modules')+.filter(function(x){+return['.bin'].indexOf(x)===-1;+})+.forEach(function(mod){+nodeModules[mod]='commonjs'+mod;+});+module.exports={mode:'development',devtool:false,//编译结果保留newlines+target:"node",+externals:nodeModules,entry:{entry:path.join(__dirname,'src/index.js'),},终于又在前端折腾了一天,哦不,原来是几天。javascript和node.js包都放在npm里面,让人搞不清楚适用环境。当然,本次推出的包都没有调用底层API,不存在兼容性问题。分不清import和require的区别,CommonJS、ES6、ES5的各种标准给我好好上了一课。嗯,简单说一下吧,难度不大,只是表达一个刚入门前端的人遇到这些问题的“幸运”之旅。参考https://zhuanlan.zhihu.com/p/...https://sazzer.github.io/blog...https://juejin.cn/post/689639...https://zh。quish.tv/how-packa...https://blog.anymelon.com/202...https://www.zhihu.com/questio...
