如何使用grunt和grunt-contrib-copy从node_modules中复制分发所需的文件

Ken*_*ker 16 dependencies copy npm gruntjs

我虽然在某处读到了package.json的"main"属性可以用来复制"dist"或部署所需的文件.我认为它有一个咕噜咕噜的任务,但我没有看到任何可以帮助我或指导我的事情.我现在复制node_modules下的所有内容,但我当然不需要分发库示例代码.

是否有一个grunt任务或任何关于如何正确使用grunt-contrib-copy的指令,只是希望从config对象的标准pkg对象(解析的package.json文件)中复制node_module依赖的文件?

Sin*_*hus 12

package.json没有足够的信息让您知道要包含什么.您将不得不解析所有require语句,但即便如此,也有一些情况无法检测,例如模块加载资源等.

正确的方法是让包作者忽略使用文件不需要的.npmignore文件甚至更好,使用package.json中的files属性来明确定义包中应包含的文件.

不幸的是,大多数包裹作者都是懒惰的,不打扰任何这个......

我鼓励您使用该files属性打开有关模块的PR .


Fáb*_*nda 10

您可以:

1)使用复制任务将每个相关文件复制到dest目录:

copy:
  js:
    files: [
      { 
         expand: true, 
         cwd: 'node_modules/jquery', 
         src: 'jquery.min.js', 
         dest: 'www/js' 
      },
      { 
         expand: true, 
         cwd: 'node_modules/jquery-mobile-bower/js', 
         src: 'jquery.mobile-*.min.js', 
         dest: 'www/js' 
      }
    ]
Run Code Online (Sandbox Code Playgroud)

jquery.min.js和jquery.mobile-xyzmin.js将被复制到www/js目录.

2)使用concat任务将所有文件连接到单个dest文件(用于生成唯一的javascript/stylesheets文件)

concat:
  options:
    separator: ';'
  js:
    dest: 'www/js/lib.js'
    src: [
      'node_modules/jquery/jquery.min.js',
      'node_modules/jquery-mobile-bower/js/jquery.mobile-*.min.js'
    ]
Run Code Online (Sandbox Code Playgroud)

jquery.min.js和jquery.mobile-xyzmin.js将合并为一个www/js/lib.js文件,以分号分隔.