Open therealchjones opened 3 years ago
Additional issue: as the relative directory rootDir is also written to .clasp.json as given to the --rootDir option., clasp -P must also be called from a directory at a certain hierarchy.
From the above, if we are in the tools
directory and use clasp create ... --rootDir ../src
to place the project in the given src
directory, ../src
is written to .clasp.json
, hence moving up a directory level and calling clasp -P src/ ...
results in:
% clasp -P src/ push
ENOENT: no such file or directory, open '../src/appsscript.json'
If we can agree on desired behavior for --rootDir
and -P
I'm happy to work on a PR. Thanks again!
also noticed this behavior breaking my app (built on https://github.com/enuchi/React-Google-Apps-Script) when npm decided to bump from clasp version 2.4.0 to 2.4.1! Might confuse others, especially if the breaking change comes from a minor version bump!
I figured out that:
clasp push
need a .clasp.json
to know what to do.clasp create ... --rootDir ./dist
create .clasp.json
automatically and store it at ./dist/.clasp.json
./dist
DIRECTORY DOES NOT EXIST CLASP WON'T CREATE THE FILE.( Google Sheets as Container in this example )
It's better you initialize the project with :
cd ~/Desktop
mkdir my-gas-project
cd my-gas-project
clasp create --type sheets --title "MySheetsContainer" --rootDir .
This let clasp create the .clasp.json
in the current working directory.
Then, assumed your code bundler (ie. webpack ) put your code inside ./dist
, you need to manually update the .clasp.json
:
{
"scriptId": "1AFqeTOrlAA7TjcbAuW9Pqt_cxPVliUfeagV1YDS9WNHJK62RD8G2Lwt0",
"rootDir": "./dist", // <- HERE PUT YOUR BUNDLE DIRECTORY
"parentId": ["1lViSwkMtrnJcYSvi9NcvmO2OamJzgXz_dUoXNn0SxVQ"]
}
In this case you should not have the .clasp.json
file.
So create .clasp.json
and put in project root directory , or the directory from where you call clasp pull | push
:
{
"scriptId":"1AFqeTOrlAB7TrcbAuW9Pqt_cxPVliUfeagV1YDS9WNHJK62RD8G2Lwt0",
"rootDir":"./dist", // <- HERE PUT YOUR BUNDLE DIRECTORY
"parentId":["1lViSwuMtrnJcYHvi9NcvmO2OamJzgXz_dUoXNn0SxVQ"]
}
I did the following:
Actual Result:
"No valid [full path] /myproject/clasp.json project file. You may need to create
or clone
a project first."
The .clasp.json project file was created in the /myproject/src.
Move the .clasp.json file I moved the .clasp.json file from /myproject/src to /myproject.
Running clasp push from /myproject now works as expected.
I did the following:
- Install clasp locally
- Clone a project from /myproject using --rootDir src
- Attempt to push files
Actual Result: "No valid [full path] /myproject/clasp.json project file. You may need to
create
orclone
a project first."The .clasp.json project file was created in the /myproject/src.
Move the .clasp.json file I moved the .clasp.json file from /myproject/src to /myproject.
Running clasp push from /myproject now works as expected.
That worked for me too. Thanks a lot!
I doubt this is the correct behavior, at least it's very counter-intuitive (#923).
I think "specified directory" in #832 was misunderstood to mean "specified by --rootDir
", but rootDir
is documented as:
Local directory in which clasp will store your project files.
I'd interpret "project files" as "pushed files", as in telling clasp which subdirectory should be pushed, analogous to TypeScript's include
.
As far as I can tell this is what it was intended for (#22 / #25), how it's commonly used and how it functions. The example in the README seems to support this, listing a build
folder for rootDir
. The README also says:
When running
clone
orcreate
, a file named.clasp.json
is created in the current directory to describe clasp's configuration for the current project.
This is no longer true, .clasp.json
is now created in the provided rootDir
.
The suggested workaround with -P
seems unnecessarily tedious and undermining the purpose of rootDir
, not to mention hazardous with shenanigans around relative paths as mentioned by @therealchjones.
I propose the following changes to create
, clone
and rootDir
:
rootDir
in .clasp.json
is always resolved against the location of .clasp.json
to avoid shenanigans.
A relative --rootDir
passed to create
and clone
should still be resolved against the current working directory.create
and clone
commands always put the new .clasp.json
in the current working directory, containing a relative path to the passed rootDir
if applicable. The created/cloned files are put inside --rootDir
.rootDir
to something like sourceDir
, buildDir
, distDir
, synchronizedDir
or gapDir
to clarify its function and make its purpose more explicit. rootDir
could stay as an alias with a deprecation warning for now to avoid a breaking change.I'd love to hear your thoughts on this! I'll look into creating a draft PR to see how this plays out.
If I specify a rootDir it pushes the files but doesn't resolve them to be at the base, uploading them in a dist
folder.
└─ dist/appsscript.json
└─ dist/dialog.68d5e797.js
└─ dist/dialog.html
└─ dist/main.js
└─ dist/sidebar.15d4dce8.js
└─ dist/sidebar.html
Pushed 6 files.
Hence it's useless as the files don't appear in App Script.
In the end I copied .clasp.json
into dist/
during build and ran it from there
Steps to reproduce the problem
Expected Behavior
(as in 2.4.0:)
Actual Behavior
(in 2.4.1:)
No valid /Users/chjones/Downloads/project-2.4.1/tools/.clasp.json project file. You may need to
create
orclone
a project first. % ./node_modules/.bin/clasp -P ../src push └─ ../src/appsscript.json Pushed 1 file.