写代码之前, 先搞出一堆依赖, 不是说和业务相关的, 就是开发时 , 所谓提高工作效率, 倒不是说不好, 问题是这些依赖今天好使, 下周 api 可能就变了, 3 个月后就 deprecated 了, 看到这 60 多个包, 什么灵感都没了.....我只想关掉编辑器.
我想问一下, 后端或者 app 或者桌面软件开发, 也这样吗, 我只了解一些 php, 我感觉那时候也没这些劳什子, 我用框架, CI, laravel, 我写的代码, 都跟我业务需求有关呐... ...
小生真诚请教后端, app, 桌面领域的人士现身说法...
"devDependencies": {
"autoprefixer": "^6.7.2",
"babel-core": "^6.22.1",
"babel-eslint": "^7.1.1",
"babel-loader": "^6.2.10",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.2.1",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.22.0",
"chalk": "^1.1.3",
"connect-history-api-fallback": "^1.3.0",
"copy-webpack-plugin": "^4.0.1",
"css-loader": "^0.26.1",
"eslint": "^3.14.1",
"eslint-friendly-formatter": "^2.0.7",
"eslint-loader": "^1.6.1",
"eslint-plugin-html": "^2.0.0",
"eslint-config-standard": "^6.2.1",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^2.0.1",
"eventsource-polyfill": "^0.9.6",
"express": "^4.14.1",
"extract-text-webpack-plugin": "^2.0.0",
"file-loader": "^0.10.0",
"friendly-errors-webpack-plugin": "^1.1.3",
"html-webpack-plugin": "^2.28.0",
"http-proxy-middleware": "^0.17.3",
"webpack-bundle-analyzer": "^2.2.1",
"cross-env": "^3.1.4",
"karma": "^1.4.1",
"karma-coverage": "^1.1.1",
"karma-mocha": "^1.3.0",
"karma-phantomjs-launcher": "^1.0.2",
"karma-phantomjs-shim": "^1.4.0",
"karma-sinon-chai": "^1.2.4",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.26",
"karma-webpack": "^2.0.2",
"lolex": "^1.5.2",
"mocha": "^3.2.0",
"chai": "^3.5.0",
"sinon": "^2.1.0",
"sinon-chai": "^2.8.0",
"inject-loader": "^2.0.1",
"babel-plugin-istanbul": "^3.1.2",
"phantomjs-prebuilt": "^2.1.14",
"chromedriver": "^2.27.2",
"cross-spawn": "^5.0.1",
"nightwatch": "^0.9.12",
"selenium-server": "^3.0.1",
"semver": "^5.3.0",
"shelljs": "^0.7.6",
"opn": "^4.0.2",
"optimize-css-assets-webpack-plugin": "^1.3.0",
"ora": "^1.1.0",
"rimraf": "^2.6.0",
"url-loader": "^0.5.8",
"vue-loader": "^11.1.4",
"vue-style-loader": "^2.0.0",
"vue-template-compiler": "^2.2.4",
"webpack": "^2.2.1",
"webpack-dev-middleware": "^1.10.0",
"webpack-hot-middleware": "^2.16.1",
"webpack-merge": "^2.6.1"
},
1
jakes 2017-04-15 21:11:27 +08:00 via iPhone 1
版本号全改成指定版本,不用这种最低版本限定不就可以了?
|
2
arzusyume 2017-04-16 00:32:17 +08:00 1
有道德的开发者会遵循语义化版本规范 ( http://semver.org/lang/zh-CN/)
不放心的话就指定具体版本 ( https://docs.npmjs.com/misc/semver) |
3
AngelCriss 2017-04-16 00:37:25 +08:00 via Android
负责任的告诉你,我做后端极少依赖其它库。
|
4
lany 2017-04-16 00:39:30 +08:00 via iPhone
基本都是自己的私人库。
|
5
Tyanboot 2017-04-16 00:45:25 +08:00 via Android
我做 py 和 PHP 的时候也是除了一些特殊的部分,比如图像识别, HTML 解析,之类的,很少像 js 一样动辄依赖几百个包的情况。。
|
6
sagaxu 2017-04-16 00:48:32 +08:00
以前 Java 的 spring 也这么麻烦,后来 spring-boot 应运而生
|
7
sagaxu 2017-04-16 00:52:01 +08:00
|
9
shyling 2017-04-16 01:34:28 +08:00
不觉得依赖一些包有什么问题,另外上面写的包都不会乱在 patch 里加 breaking changes 的吧?
跟不上变化就别升级啊。。 另外很负责的告诉你,很多人的代码写的并不见得会比 npm 一个很简单的包里的好 |
10
guokeke 2017-04-16 01:44:11 +08:00 via Android
你可以不用这些,照样写。而且我看了这些依赖,没有什么像 isArray 那样的, webpack , babel , eslint , express , karma 这些打包,转译,测试,这些都是很良心的工具,一些插件也不是必须的,可以去掉。
|
11
Miy4mori 2017-04-16 03:22:37 +08:00 via iPhone
依赖上百个包的 java 后端挺常见的,现代软件开发可不就是靠第三方包嘛。
|
12
FunctionOne 2017-04-16 04:04:58 +08:00
我跟你有同感的。
|
13
reeco 2017-04-16 04:38:19 +08:00 via iPhone
一个 node_module 动辄几百 M
|
14
kslr 2017-04-16 05:26:33 +08:00 via Android
Laravel Composer 其实也很多我
|
15
qhxin 2017-04-16 07:52:35 +08:00 via Android
node_module 在 Win8 下面删除的时候尽然报错,路径长度超过了系统能接受的范围,打开新项目 phpstorm 就去索引,卡的要命,这设计真心醉醉的。不同意楼上拿 composer 来比较的,主要是 js 这套升级换代太快了,而且经常不兼顾旧代码,说句不好听的话就是没有责任心。
|
16
isb 2017-04-16 07:59:25 +08:00 via iPhone
用 yarn
|
17
340244120 2017-04-16 08:00:03 +08:00 via Android
一楼已经终结本帖了。。。
|
18
kokutou 2017-04-16 08:38:33 +08:00 via Android
@qhxin 长度超出是奇葩 windows 路径长度的限制。。。
不过好在因为 wsl ,现在 win10 已经可以一个注册表解除限制了。 |
20
di94sh 2017-04-16 08:51:57 +08:00 via Android
不需要,可能会用一两个库。
|
21
lwbjing 2017-04-16 11:09:08 +08:00
《前端的入门之切图 5 分钟,配置俩小时》,也是这样的。。
|
22
libook 2017-04-16 11:21:45 +08:00
不要用不稳定的包,像你说隔几天就出一次不兼容更新的,还不如不用。
大多高质量的包都会考虑相当长时间的向前向后兼容,甚至会有 LTS 版本。 为了确保不会被维护者坑,一定要固定包的版本号,不要用模糊版本号。 觉得不好用不想用就不要用,要看应用场景是否一定必要使用某个第三方包。 |
23
vizards 2017-04-16 11:31:46 +08:00 via iPhone
用 yarn 锁版本号
|
24
coderfox 2017-04-16 11:40:54 +08:00 via Android
一个是,限定版本号不要用最低版本,用等价版本。
例如:不要 ^1.0.0 ,要 ~1.0.0 。 另外一个是,可以用 yarn ,锁定版本。 |
25
bdbai 2017-04-16 12:06:04 +08:00 via Android
说 npm 超出 Windows 路径长度限制的,现在早就修复了好吗。
为了防止更新依赖引入 breaking changes ,请使用 yarn 。 |
26
Quaintjade 2017-04-16 12:47:25 +08:00 via Android
JS 原厂负重轮不够好用,各家都在造轮子,所以轮子多。你要做的是找出做得好的轮子,固定住型号批次。
|
27
smithtel 2017-04-16 12:51:42 +08:00
看到头像我居然点了一下。。。
|
28
murmur 2017-04-16 12:57:11 +08:00
dev app 只是构建工具而已
如果把 vs studio+.net runtime 做成 node_modules ,估计 dev 依存记事本都打不开提示超大 |
29
qdwang 2017-04-16 14:03:32 +08:00 via iPhone
然后每次一开始就要装半天 各种 build
|
30
qdwang 2017-04-16 14:04:08 +08:00 via iPhone
感觉 node 为二氧化碳的增加排放做了不少贡献
|
32
hengzhang 2017-04-16 14:11:22 +08:00
楼主的头像太可怕了,已经上当
|
33
plantain 2017-04-16 14:26:51 +08:00
|
35
jason19659 2017-04-16 15:51:33 +08:00
依赖肯定要的
|
36
junnplus 2017-04-16 16:21:09 +08:00
@shyling 如果是几个函数级别的 package 我觉得就没必要动不动就安装依赖包,还不如自己 copy 一份写一个 utils 解决呢
|
37
shyling 2017-04-16 16:52:40 +08:00 1
@junnplus 当然有区别,例如那个 isarray ,作者本来写的 Object.prototype.toString.call 后来做 perf 发现这样性能不是最好的,后来又去改了实现。
直接 copy 哪里会去维护这些不太可能成为瓶颈的小得性能提升呢? |
38
connection 2017-04-16 23:23:50 +08:00
这是 vue 脚手架吧>_<
|
40
Balthild 2017-04-19 10:05:33 +08:00 via Android
所以你写代码之前为什么要看 package.json ?
|
41
shyling 2017-04-19 10:31:39 +08:00
@plantain 有点问题, react 是应该放在 deps 里的, dev 说的是开发使用, react 都打包到 bundle 里了
|
42
plantain 2017-04-19 11:02:50 +08:00 via Android
@shyling 分情况的,如果是 react 程序,实际运行的是 bundle ,在生产环境只需要那个 bundle ,不需要安装 react 包,那么运行 npm i --production 时就不应该安装 react ,所以不应该放到 deps 里;。
|
43
shyling 2017-04-19 12:40:52 +08:00
@plantain 其实我不知道你这么说你纯前端 spa 项目 npm i --production 能做什么事情。。。什么都不装了么
|
44
shyling 2017-04-19 12:53:59 +08:00
@plantain 哦,我又想了一想,其实不管是 deps 还是 devDeps 都是 npm 自己管理运行的,浏览器里的代码又不是通过 npm start / run 什么的执行的,所以说这里还是主要用于区分包的用途。
|
45
plantain 2017-04-19 12:58:25 +08:00 via Android
@shyling 很多项目的前端和 nodejs 是混在一起的,共用一个 package.json ,这种情况下 react 不放在 deps 下更合理;纯前端的话确实放在哪里都没太大影响。
|
46
sensui7 OP |
47
Balthild 2017-04-21 20:23:17 +08:00
@sensui7 要看 package 也是在某段代码中遇到某个语句时,去看它所调用的具体的那个 package ,怎么都轮不上看 package.json 里面的 package 列表吧?如果你想先了解代码中调用的包,文件头部难道没有 import xxx from "xxx"; ?
|