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

时间:2013-08-15 03:05:00

标签: copy dependencies npm gruntjs

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

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

2 个答案:

答案 0 :(得分:12)

package.json没有足够的信息让您知道要包含的内容。您必须解析所有require语句,但即使这样,也有一些情况无法检测,例如模块加载资源等。

执行此操作的正确方法是让包作者忽略使用.npmignore file甚至更好的文件,使用package.json中的files property来明确定义应该使用的文件包括在内。

不幸的是,尽管如此,大多数包裹作者都是懒惰的,不会为此烦恼...

我建议您使用files属性在相关模块上打开PR。

答案 1 :(得分: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' 
      }
    ]

jquery.min.js和jquery.mobile-x.y.z.min.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'
    ]

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