• Rails里的webpack默认配置文件shared.js,是会把packs文件夹下根目录js文件都当作entry打包,会导致不必要的entry重复打包的问题。这里可以手动指定一下自己的entry,这样会大幅减少文件体积和提高打包速度。

    example:

    module.exports = {
      //手动指定两个入口
      entry: {
        'main': ["./app/javascript/packs/main"],
        'operate/main': ["./app/javascript/packs/operate/main"]
      },
      //下面是原来的配置
      //packPaths.reduce( 
        //(map, entry) => {
          //const localMap = map
          //const namespace = relative(join(paths.source, paths.entry), dirname(entry))
          //localMap[join(namespace, basename(entry, extname(entry)))] = resolve(entry)
          //return localMap
        //}, {}
      //),
    
      output: {
        filename: '[name].js',
        path: resolve(paths.output, paths.entry),
        publicPath
      },
    ........
    }
    
    
  • 更新了开发中遇到的一些小问题

  • 量产型炮灰工程师 at 2017年05月22日

    好文,观点都赞同

  • 当然可以的,引入webpack和yarn,复杂的部分只是在于开发和构建上,结果出来都是在页面引用JS而已。只要处理好assets pipeline和pack出来的静态文件引用顺序,两者是可以并存的。

    另外,打开webpacker的源码,找到javascript_pack_tag, 实际上也是调用了javascript_include_tag

    
      def javascript_pack_tag(name, **options)
        javascript_include_tag(Webpacker::Manifest.lookup("#{name}#{compute_asset_extname(name, type: :javascript)}"), **options) #从生成出来的manifest.json找到对应静态文件编译后的文件名
      end
    
    ```
    
    ```json
    //manifest.json example
    {
      "app.js": "/packs/app-c34667aca39442f786a0.js",
      "application.js": "/packs/application-912810e12140b29375d2.js",
      "page/Actor.js": "/packs/page/Actor-81e43cb17759d171104e.js",
      "page/Actors.js": "/packs/page/Actors-638afba3889927791378.js",
      "page/Movie.js": "/packs/page/Movie-c4cdf69886b211c14574.js",
      "page/Movies.js": "/packs/page/Movies-f04878a089ecec487810.js",
      "page/Search.js": "/packs/page/Search-f02e3e7031931ef876b9.js",
      "page/Tag.js": "/packs/page/Tag-75d6da5528f200354587.js",
      "page/Tags.js": "/packs/page/Tags-8aa0b6c7cc811618c51f.js",
      "router/index.js": "/packs/router/index-10afda1a26fd89c89880.js",
      "store/action_types.js": "/packs/store/action_types-aa75ce66ee2e3a622d51.js",
      "store/index.js": "/packs/store/index-5389b0582084ca0e4751.js",
      "store/module/actor.js": "/packs/store/module/actor-b67a50e248408fa8fa6a.js",
      "store/module/movie.js": "/packs/store/module/movie-20441ad04b207c3337cc.js",
      "store/module/search.js": "/packs/store/module/search-c7cae47a3a1058a7a6b5.js",
      "store/module/tag.js": "/packs/store/module/tag-8952d2f3ce45bf2fd3f7.js",
      "store/mutation_types.js": "/packs/store/mutation_types-e74d876aaaabbe43d43f.js"
    }
    

    所以webpack的静态文件要使用turbolink,在页面里这样用就行

    <%= javascript_pack_tag "application", :"data-turbolinks-track" => true %>
    
  • 可以的,原来的assets pipeline还在

  • Ruby 的爬虫世界 at 2016年12月06日

    @ghjcumt2008 scrapy is awesome!

    @afly IP限制,比较常见是一段时间内同一IP访问次数限制,另外有些资源还会有一些更复杂的登录令牌与IP绑定的限制,这个与资源方的风险防范机制有关。理论上,爬虫越能模拟到真实用户行为,越难防范,落实到爬虫的实现,就是各种细节上的调节。如你所说大量的手机号是有必要的,我们的其中一个项目就是开了一堆手机号和买了一堆低配红米,做到了控制短信,还有更新登录信息到服务器,还有在Android利用辅助权限上做一些模拟行为操作😅 。另外代理的话就比较好理解了,做成一个代理IP池,一个IP被封了另一个IP再上,本质就是需要很多可用的IP代理。免费的话可以爬各大代理网站提供的免费代理:

    1. http://www.xicidaili.com/
    2. http://ip.izmoney.com/
    3. http://www.kuaidaili.com/
    4. http://www.proxy360.cn/
    5. http://www.goubanjia.com/

    这里有个好玩的就是他们也有一定的防范机制,鸡生蛋生鸡😂 ,比较奇葩的是goubanjia进去是等一会儿才会变出真正的端口...

    第二种方法就是购买他们的收费代理。有了一堆IP后,我们的做法是搭一个专门的小服务,小服务会提供接口,把代理IP拿去test target,另外也有接口返回一堆可用的IP。

    当然了,如果还是感觉代理质量不太好的话(延迟、大量不可用),土豪的话可以买一堆低配的云IP服务器,可以找些切换IP比较快的服务(阿里云好像有)。最后我们还想了个方案,就是把家里空余的宽带资源也可以提供出来,用树莓派做个远程控制,IP被封了就重新上线获取新的IP,不过这个方案还没用到(上面两个已经够用了)...

  • Ruby 的爬虫世界 at 2016年12月06日

    LS说的都玩过,公司其中一个业务就要用到爬虫,自己的个人项目不少也要用到爬虫。遇到的问题有:动态加载(分析JS代码、Selenium2大杀器)、IP限制(挂各种代理[免费收费]、甚至树莓派控制ADSL路由重启获取动态IP...)、用户登录(网页的/ APP API加密破解),语言用过Python/Ruby/Nodejs。现在一些简单网页解析爬虫就用js写因为可以很快(cheerio jquery like),复杂一些要做任务调度的就Python或Ruby,团队里也有大牛用Elixir,膜拜膜拜

  • 沧蓝大大,从里屋一直追随你的步伐努力中😁

  • Ruby China 2016 纪念拉链帽衫 at 2016年11月10日

    @alphaliu 这两天穿上了,质量也就过得去,挺暖和的

  • Ruby China 2016 纪念拉链帽衫 at 2016年11月07日

    收到了,挺暖的,就是不知道大广州什么时候有机会穿