代码之家  ›  专栏  ›  技术社区  ›  mabe02

在添加纱线和webpacker后,预编译中出现了几个错误

  •  0
  • mabe02  · 技术社区  · 6 年前

    我最近在rails 5应用程序中添加了webpacker和Thread,并执行了 bundle exec webpacker:install:react .

    这安装了大量依赖项,我在运行时遇到了几个错误 bundle exec rake assets:precompile RAILS_ENV=production RAILS_SERVE_STATIC_FILES=enable SECRET_KEY_BASE=$(bundle exec rake secret)

    uglifier 4.1.5
    rails 5.1.4
    ruby-2.4.0
    yarn 1.3.2
    node 9.4.0
    

    我的配置/初始值设定项/资产。rb型

    # ...
    Rails.application.config.assets.paths << Rails.root.join('node_modules')
    Rails.application.config.assets.precompile += %w(*.js *.scss)
    Rails.application.config.assets.precompile += %w(*.png *.woff2 *.woff *.ttf *.eot *.jpg *.gif *.svg *.ico)
    

    我的配置/环境/生产。rb包括:

    config.assets.js_compressor = Uglifier.new(harmony: true)
    config.assets.css_compressor = :sass
    

    作为临时解决方法,我在 .yarnclean 引发异常的文件:

    # misc
    *.md
    *.jst
    *.def
    
    # specific files
    jquery/src
    
    # Uglifier::Error: Unexpected token: punc ({)}
    ajv/dot
    # .jst files
    fbjs/flow
    # Uglifier::Error: return outside of function
    mkdirp/bin/cmd.js
    node-gyp/bin/node-gyp.js
    strip-indent/cli.js
    webpack/bin/webpack.js
    webpack-dev-server/bin/webpack-dev-server.js
    

    然而,清理垃圾箱文件夹实际上是一个非常糟糕的主意,因为它破坏了网页本身:

    /home/kupta/.rvm/gems/ruby-2.4.0@my-project/gems/webpacker-3.2.1/lib/webpacker/webpack_runner.rb:11:in `exec':
    No such file or directory - ~/my-project/node_modules/.bin/webpack (Errno::ENOENT)
    

    在资产预编译期间,是否有任何智能方法来处理节点模块?我的资产文件夹增加了60 MB以上,我想阻止对其中一些进行编译。

    提前谢谢你

    编辑2018-02-09

    我目前解决了样式表的问题,如下所示:

    yarn add resolve-url-loader
    

    然后,我在中包含了这个解析器,它处理字体、图像等从资产模块的相对导入 配置/webpacker/环境。js公司 :

    const { environment } = require('@rails/webpacker')
    
    // resolve-url-loader must be used before sass-loader
    environment.loaders.get('sass').use.splice(-1, 0, {
        loader: 'resolve-url-loader',
        options: {
            attempts: 1
        }
    });
    
    module.exports = environment
    

    然后我创建了一个 application.sass 在**app/javascripts/packs`中导入节点库:

    @import '~font-awesome/scss/font-awesome'
    @import '~bootstrap/dist/css/bootstrap'
    # --- and so on
    

    不幸的是,我还没有找到一种捆绑相关的方法。js文件。我希望能够做类似的事情 //= require 链轮使用

    1 回复  |  直到 6 年前
        1
  •  1
  •   mabe02    6 年前

    解决方案甚至太简单了(在我弄明白之后)。

    我的文件夹结构:

    app/javascripts/pack
    |
    |_ vendor.js
    |
    |_ styles.js
    

    在里面 vendor.js 我刚导入了如下库 import 'jquery/dist/jquery.js'; 所有人都被捆绑到 小贩js公司 收拾

    在里面 styles.js 我刚导入了如下库 import 'font-awesome/scss/font-awesome.scss'; 所有人都被捆绑到 样式。css 收拾

    所以不需要包括 node_modules 在我的资产路径中。

    (我记录了到这里的所有方法 this question about yarn )

    推荐文章