[
https://issues.apache.org/jira/browse/CB-11412?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15330874#comment-15330874
]
ASF GitHub Bot commented on CB-11412:
-------------------------------------
Github user stevengill commented on a diff in the pull request:
https://github.com/apache/cordova-lib/pull/456#discussion_r67077184
--- Diff: cordova-lib/src/cordova/create.js ---
@@ -252,133 +249,116 @@ function create(dir, optionalId, optionalName, cfg,
fetchOpt) {
www: import_from_path
};
- // Keep going into child "www" folder if exists in stock app
package.
+ // Keep going into child "www" folder if exists in stock app
package; used to find config.xml
while (fs.existsSync(path.join(paths.www, 'www'))) {
paths.root = paths.www;
paths.www = path.join(paths.root, 'www');
}
- // find config.xml
+ // find config.xml OR get stock config.xml, used if template does
not contain config.xml
if (fs.existsSync(path.join(paths.root, 'config.xml'))) {
paths.configXml = path.join(paths.root, 'config.xml');
- paths.configXmlLinkable = true;
} else {
- try {
- paths.configXml =
- path.join(require('cordova-app-hello-world').dirname,
- 'config.xml');
- } catch (e) {
- // Falling back on npm@2 path hierarchy
- // TODO: Remove fallback after cordova-app-hello-world
release
- paths.configXml =
- path.join(__dirname, '..', '..', 'node_modules',
- 'cordova-app-hello-world', 'config.xml');
- }
- }
- if (fs.existsSync(path.join(paths.root, 'merges'))) {
- paths.merges = path.join(paths.root, 'merges');
- } else {
- // No merges by default
- }
- if (fs.existsSync(path.join(paths.root, 'hooks'))) {
- paths.hooks = path.join(paths.root, 'hooks');
- paths.hooksLinkable = true;
- } else {
- try {
- paths.hooks =
- path.join(require('cordova-app-hello-world').dirname,
- 'hooks');
- } catch (e) {
- // Falling back on npm@2 path hierarchy
- // TODO: Remove fallback after cordova-app-hello-world
release
- paths.hooks =
- path.join(__dirname, '..', '..', 'node_modules',
- 'cordova-app-hello-world', 'hooks');
- }
+ paths.configXml =
path.join(require('cordova-app-hello-world').dirname, 'config.xml');
}
+ // get stock www; used if template does not contain www
+ paths.www = path.join(require('cordova-app-hello-world').dirname,
'www');
+
+ // get stock hooks; used if template does not contain hooks
+ paths.hooks =
path.join(require('cordova-app-hello-world').dirname, 'hooks');
+
+
var dirAlreadyExisted = fs.existsSync(dir);
if (!dirAlreadyExisted) {
fs.mkdirSync(dir);
}
-
- var tryToLink = !!cfg.lib.www.link;
- function copyOrLink(src, dst, linkable) {
- if (src) {
- if (tryToLink && linkable) {
- fs.symlinkSync(src, dst, 'dir');
- } else {
- shell.mkdir(dst);
- shell.cp('-R', path.join(src, '*'), dst);
- }
- }
- }
-
- /*
- Copies template files, and directories into a Cordova project
directory.
- Files, and directories not copied include: www, mergers,platforms,
- plugins, hooks, and config.xml. A template directory, and platform
- directory must be passed.
-
- templateDir - Template directory
- projectDir - Project directory
- */
- function copyTemplateFiles(templateDir, projectDir) {
- var templateFiles; // Current file
-
- templateFiles = fs.readdirSync(templateDir);
-
- // Remove directories, and files that are automatically copied
- templateFiles = templateFiles.filter(
- function (value) {
- return !(value === 'www' || value === 'mergers' ||
- value === 'config.xml' || value === 'hooks');
- }
- );
-
- // Copy each template file
- for (var i = 0; i < templateFiles.length; i++)
- shell.cp('-R', path.resolve(templateDir,
templateFiles[i]), projectDir);
- }
-
try {
- copyOrLink(paths.www, path.join(dir, 'www'), true);
- copyOrLink(paths.merges, path.join(dir, 'merges'), true);
- copyOrLink(paths.hooks, path.join(dir, 'hooks'),
- paths.hooksLinkable);
-
+ // Copy files from template to project
if (cfg.lib.www.template)
- copyTemplateFiles(import_from_path, dir);
+ copyTemplateFiles(import_from_path, dir, isSubDir);
- if (paths.configXml) {
- if (tryToLink && paths.configXmlLinkable) {
- fs.symlinkSync(paths.configXml, path.join(dir,
'config.xml'));
- } else {
- shell.cp(paths.configXml, path.join(dir,
'config.xml'));
- }
+ // If following were not copied from template, copy from stock
app hello world
+ ifNotCopied(paths.www, path.join(dir, 'www'));
+ ifNotCopied(paths.hooks, path.join(dir, 'hooks'));
+ if (!fs.existsSync(path.join(dir, 'config.xml')) &&
paths.configXml) {
+ shell.cp(paths.configXml, path.join(dir, 'config.xml'));
}
} catch (e) {
if (!dirAlreadyExisted) {
shell.rm('-rf', dir);
}
- if (process.platform.slice(0, 3) == 'win' && e.code ==
'EPERM') {
- throw new CordovaError('Symlinks on Windows require
Administrator privileges');
- }
throw e;
}
+
+ // Update package.json name and version fields.
+ if (fs.existsSync(path.join(dir, 'package.json'))) {
+ var pkgjson = require(path.resolve(dir, 'package.json'));
+ if (cfg.name) {
+ pkgjson.name = cfg.name.toLowerCase();
+ }
+ pkgjson.version = '1.0.0';
+ fs.writeFile(path.join(dir, 'package.json'),
JSON.stringify(pkgjson), function (err) {
+ if (err) throw new CordovaError('Could not write
package.json');
+ events.emit('verbose', 'writing name to package.json');
+ });
+ }
+
// Create basic project structure.
if (!fs.existsSync(path.join(dir, 'platforms')))
shell.mkdir(path.join(dir, 'platforms'));
if (!fs.existsSync(path.join(dir, 'plugins')))
shell.mkdir(path.join(dir, 'plugins'));
- // Write out id and name to config.xml
+ // Write out id and name to config.xml; set version to 1.0.0 (to
match package.json default version)
var configPath = cordova_util.projectConfig(dir);
var conf = new ConfigParser(configPath);
if (cfg.id) conf.setPackageName(cfg.id);
if (cfg.name) conf.setName(cfg.name);
+ conf.setVersion('1.0.0');
conf.write();
});
}
+
+/**
+ * Recursively copies folder to destination if folder is not found in
destination.
+ * @param {string} src for copying
+ * @param {string} dst for copying
+ * @return No return value
+ */
+function ifNotCopied(src, dst) {
+ if (!fs.existsSync(dst) && src) {
+ shell.mkdir(dst);
+ shell.cp('-R', path.join(src, '*'), dst);
+ }
+}
+
+/**
+ * Copies template files, and directories into a Cordova project directory.
+ * If the template exists in a subdirectory everything is copied.
+ * Otherwise package.json, RELEASENOTES.md, .git, NOTICE, LICENSE,
COPYRIGHT, and .npmignore are not copied over.
+ * A template directory, and platform directory must be passed.
--- End diff --
I think you meant project directory not platform directory in this comment
> Update template implementation in cordova create --template
> -----------------------------------------------------------
>
> Key: CB-11412
> URL: https://issues.apache.org/jira/browse/CB-11412
> Project: Apache Cordova
> Issue Type: Improvement
> Components: CordovaLib
> Reporter: Caryn Tran
> Assignee: Caryn Tran
>
> https://github.com/cordova/cordova-discuss/pull/49
> Sometimes we do want a `package.json` copied over. `package.json` could have
> build scripts that are essential for the template to work. To handle this use
> case, template authors are suggested to put template files in a subdirectory
> and point to that subdirectory in index.js. All files in the subdirectory are
> copied over.
> Update the current template implementation to ignore the list of files above
> that shouldn't be copied over when using `--template`. If a subdirectory is
> used, copy the entire contents of the subdirectory.
> If a `package.json` exists in the subdirectory, we should update its fields
> like we do to `config.xml`.
> https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/create.js#L378-L382.
> Only field to update in `package.json` should be `package.name`.
> `package.name` should be updated to use `config.name` lowercased (npm package
> names have to be lowercase). `config.name` is the optional third argument
> `cordova create` takes.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]