![Create React App Officially Deprecated Amid React 19 Compatibility Issues](https://cdn.sanity.io/images/cgdhsj6q/production/04fa08cf844d798abc0e1a6391c129363cc7e2ab-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Create React App Officially Deprecated Amid React 19 Compatibility Issues
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
grunt-npmcopy
Advanced tools
npm for the front-end without the cruft.
node_modules
public.Whenever you add a new front-end dependency with npm, add which file should be copied and where to your Gruntfile "npmcopy"
config. Then, run grunt npmcopy
.
This plugin requires Grunt.
If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
npm install grunt-npmcopy --save-dev
Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
grunt.loadNpmTasks('grunt-npmcopy');
Note: have a look at load-grunt-tasks so you can skip this step for all your grunt plugins.
In your project's Gruntfile, add a section named npmcopy
to the data object passed into grunt.initConfig()
.
grunt.initConfig({
npmcopy: {
options: {
// Task-specific options go here
},
your_target: {
// Target-specific file lists and/or options go here
}
}
});
Type: String
Default value: 'node_modules
'
srcPrefix
will prefix your source locations with the correct folder location.
Type: String
Default value: ''
destPrefix
will be used as the prefix for destinations.
Type: Boolean
Default value: false
To help ensure you didn't miss any, report any modules in your package.json that have not been configured to copy at least one file with npmcopy
.
Type: Object
Default value: {}
Options to pass to grunt.file.copy
when copying the files. See grunt.file.copy
grunt.initConfig({
npmcopy: {
// Anything can be copied
test: {
options: {
destPrefix: 'test/js'
},
files: {
// Keys are destinations (prefixed with `options.destPrefix`)
// Values are sources (prefixed with `options.srcPrefix`); One source per destination
// e.g. 'node_modules/chai/lib/chai.js' will be copied to 'test/js/libs/chai.js'
'libs/chai.js': 'chai/lib/chai.js',
'mocha/mocha.js': 'libs/mocha/mocha.js',
'mocha/mocha.css': 'libs/mocha/mocha.css'
}
},
// Javascript
libs: {
options: {
destPrefix: 'public/js/libs'
},
files: {
'jquery.js': 'jquery/jquery.js',
'require.js': 'requirejs/require.js'
},
},
plugins: {
options: {
destPrefix: 'public/js/plugins'
},
files: {
// Make dependencies follow your naming conventions
'jquery.chosen.js': 'chosen/public/chosen.js'
}
},
// Less
less: {
options: {
destPrefix: 'less'
},
files: {
// If either the src or the dest is not present,
// the specified location will be used for both.
// In other words, this will copy
// 'npm_components/bootstrap/less/dropdowns.less' to 'less/bootstrap/less/dropdowns.less'
// See http://gruntjs.com/configuring-tasks#files for recommended files formats
src: 'bootstrap/less/dropdowns.less'
}
},
// Images
images: {
options: {
destPrefix: 'public/images'
},
files: {
'account/chosen-sprite.png': 'chosen/public/chosen-sprite.png',
'account/chosen-sprite@2x.png': 'chosen/public/chosen-sprite@2x.png'
}
},
// Entire folders
folders: {
files: {
// Note: when copying folders, the destination (key) will be used as the location for the folder
'public/js/libs/lodash': 'lodash',
// The destination can also be a folder
// Note: if the basename of the location does not have a period('.'),
// it is assumed that you'd like a folder to be created if none exists
// and the source filename will be used
'public/js/libs': 'lodash/dist/lodash.js'
}
},
// Glob patterns
glob: {
files: {
// When using glob patterns, destinations are *always* folder names
// into which matching files will be copied
// Also note that subdirectories are **not** maintained
// if a destination is specified
// For example, one of the files copied here is
// 'lodash/dist/lodash.js' -> 'public/js/libs/lodash/lodash.js'
'public/js/libs/lodash': 'lodash/dist/*.js'
}
},
// Glob without destination
globSrc: {
options: {
destPrefix: 'public/js/libs'
},
// By not specifying a destination, you are denoting
// that the lodash directory structure should be maintained
// when copying.
// For example, one of the files copied here is
// 'lodash/dist/lodash.js' -> 'public/js/libs/lodash/dist/lodash.js'
src: 'lodash/**/*.js'
},
// Main pragma
// Adding :main to the end of a source path will retrieve the main file(s) for that package
// If the main property is not specified by a package, npmcopy will fail
main: {
src: 'jquery.minlight:main',
dest: 'public/js/plugins/'
}
}
});
Follow the same coding style present in the repo and add tests for any bug fix or feature addition.
See the CONTRIBUTING.md for more info.
Copyright (c) 2014 Timmy Willison. Licensed under the MIT license.
FAQs
NPM on the front-end without the cruft.
We found that grunt-npmcopy demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.